优化上下文恢复

This commit is contained in:
boyce
2025-10-05 13:37:34 +08:00
parent c6488faeff
commit 654426a836
2 changed files with 17 additions and 9 deletions

View File

@@ -6,6 +6,8 @@ type IBaseExecNode interface {
initInnerExecNode(innerNode *innerExecNode)
initExecNode(gr *Graph, en *execNode) error
GetPorts() ([]IPort, []IPort)
getExecNodeInfo() (*ExecContext, *execNode)
setExecNodeInfo(gr *ExecContext, en *execNode)
}
type IInnerExecNode interface {
@@ -191,6 +193,15 @@ func (en *BaseExecNode) initInnerExecNode(innerNode *innerExecNode) {
en.innerExecNode = innerNode
}
func (en *BaseExecNode) getExecNodeInfo() (*ExecContext, *execNode) {
return en.ExecContext, en.execNode
}
func (en *BaseExecNode) setExecNodeInfo(c *ExecContext, e *execNode) {
en.ExecContext = c
en.execNode = e
}
func (en *BaseExecNode) initExecNode(gr *Graph, node *execNode) error {
ctx, ok := gr.context[node.Id]
if !ok {
@@ -478,15 +489,6 @@ func (en *BaseExecNode) GetOutPortArrayLen(index int) Port_Int {
}
func (en *BaseExecNode) DoNext(index int) error {
// 记录之前的上下文,执行完后需要恢复
preExContext := en.ExecContext
preExecNode := en.execNode
defer func() {
en.ExecContext = preExContext
en.execNode = preExecNode
}()
// -1 表示中断运行
if index == -1 {
return nil

View File

@@ -85,6 +85,12 @@ func (en *execNode) exec(gr *Graph) (int, error) {
return -1, fmt.Errorf("exec node %s not exec", en.execNode.GetName())
}
// 执行完要恢复上下文结点的BaseExecNode会被执行时修改
ctx, exNode := node.getExecNodeInfo()
defer func() {
node.setExecNodeInfo(ctx, exNode)
}()
if err := node.initExecNode(gr, en); err != nil {
return -1, err
}