diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index 0dd95c6..5ccc2e8 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -815,6 +815,8 @@ ExecShutdownNode(PlanState *node) if (node == NULL) return false; + planstate_tree_walker(node, ExecShutdownNode, NULL); + switch (nodeTag(node)) { case T_GatherState: @@ -824,5 +826,5 @@ ExecShutdownNode(PlanState *node) break; } - return planstate_tree_walker(node, ExecShutdownNode, NULL); + return false; } diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index a1a3561..32c97d3 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -229,10 +229,10 @@ ExecGather(GatherState *node) void ExecEndGather(GatherState *node) { + ExecEndNode(outerPlanState(node)); /* let children clean up first */ ExecShutdownGather(node); ExecFreeExprContext(&node->ps); ExecClearTuple(node->ps.ps_ResultTupleSlot); - ExecEndNode(outerPlanState(node)); } /*