diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index ef2fd46092e..d78862e660e 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1691,7 +1691,7 @@ ExecutePlan(EState *estate, * point. */ if (!(estate->es_top_eflags & EXEC_FLAG_BACKWARD)) - (void) ExecShutdownNode(planstate); + ExecShutdownNode(planstate); if (use_parallel_mode) ExitParallelMode(); diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index b5667e53e5f..36406c3af57 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -121,6 +121,7 @@ static TupleTableSlot *ExecProcNodeFirst(PlanState *node); static TupleTableSlot *ExecProcNodeInstr(PlanState *node); +static bool ExecShutdownNode_walker(PlanState *node, void *context); /* ------------------------------------------------------------------------ @@ -768,8 +769,14 @@ ExecEndNode(PlanState *node) * Give execution nodes a chance to stop asynchronous resource consumption * and release any resources still held. */ -bool +void ExecShutdownNode(PlanState *node) +{ + (void) ExecShutdownNode_walker(node, NULL); +} + +static bool +ExecShutdownNode_walker(PlanState *node, void *context) { if (node == NULL) return false; @@ -789,7 +796,7 @@ ExecShutdownNode(PlanState *node) if (node->instrument && node->instrument->running) InstrStartNode(node->instrument); - planstate_tree_walker(node, ExecShutdownNode, NULL); + planstate_tree_walker(node, ExecShutdownNode_walker, context); switch (nodeTag(node)) { diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index 82925b4b633..a91c472a0d9 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -239,7 +239,7 @@ extern PlanState *ExecInitNode(Plan *node, EState *estate, int eflags); extern void ExecSetExecProcNode(PlanState *node, ExecProcNodeMtd function); extern Node *MultiExecProcNode(PlanState *node); extern void ExecEndNode(PlanState *node); -extern bool ExecShutdownNode(PlanState *node); +extern void ExecShutdownNode(PlanState *node); extern void ExecSetTupleBound(int64 tuples_needed, PlanState *child_node);