gather_shutdown_children_first.patch
application/octet-stream
Filename: gather_shutdown_children_first.patch
Type: application/octet-stream
Part: 0
Message:
Re: Parallel bitmap heap scan
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/executor/execProcnode.c | 3 | 1 |
| src/backend/executor/nodeGather.c | 1 | 1 |
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));
}
/*