1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-27 22:56:53 +03:00

Shut down Gather's children before shutting down Gather itself.

It turns out that the original shutdown order here does not work well.
Multiple people attempting to develop further parallel query patches
have discovered that they need to do cleanup before the DSM goes away,
and you can't do that if the parent node gets cleaned up first.

Patch by me, reviewed by KaiGai Kohei and Dilip Kumar.

Discussion: http://postgr.es/m/CA+TgmoY6bOc1YnhcAQnMfCBDbsJzROQ3sYxSAL-SYB5tMJcTKg@mail.gmail.com
Discussion: http://postgr.es/m/9A28C8860F777E439AA12E8AEA7694F8012AEB82@BPXM15GP.gisp.nec.co.jp
Discussion: http://postgr.es/m/CA+TgmoYuPOc=+xrG1v0fCsoLbKAab9F1ddOeaaiLMzKOiBar1Q@mail.gmail.com
This commit is contained in:
Robert Haas 2017-02-22 07:59:27 +05:30
parent d912dd062b
commit acf555bc53
2 changed files with 4 additions and 2 deletions

View File

@ -815,6 +815,8 @@ ExecShutdownNode(PlanState *node)
if (node == NULL) if (node == NULL)
return false; return false;
planstate_tree_walker(node, ExecShutdownNode, NULL);
switch (nodeTag(node)) switch (nodeTag(node))
{ {
case T_GatherState: case T_GatherState:
@ -824,5 +826,5 @@ ExecShutdownNode(PlanState *node)
break; break;
} }
return planstate_tree_walker(node, ExecShutdownNode, NULL); return false;
} }

View File

@ -229,10 +229,10 @@ ExecGather(GatherState *node)
void void
ExecEndGather(GatherState *node) ExecEndGather(GatherState *node)
{ {
ExecEndNode(outerPlanState(node)); /* let children clean up first */
ExecShutdownGather(node); ExecShutdownGather(node);
ExecFreeExprContext(&node->ps); ExecFreeExprContext(&node->ps);
ExecClearTuple(node->ps.ps_ResultTupleSlot); ExecClearTuple(node->ps.ps_ResultTupleSlot);
ExecEndNode(outerPlanState(node));
} }
/* /*