mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Guard against core dump from uninitialized subplan.
If the planner erroneously puts a non-parallel-safe SubPlan into a parallelized portion of the query tree, nodeSubplan.c will fail in the worker processes because it finds a null in es_subplanstates, which it's unable to cope with. It seems worth a test-and-elog to make that an error case rather than a core dump case. This probably should have been included in commit 16ebab688, which was responsible for allowing nulls to appear in es_subplanstates to begin with. So, back-patch to v10 where that came in. Discussion: https://postgr.es/m/924226.1604422326@sss.pgh.pa.us
This commit is contained in:
parent
501035a0ac
commit
205f958406
@ -794,7 +794,15 @@ ExecInitSubPlan(SubPlan *subplan, PlanState *parent)
|
|||||||
sstate->planstate = (PlanState *) list_nth(estate->es_subplanstates,
|
sstate->planstate = (PlanState *) list_nth(estate->es_subplanstates,
|
||||||
subplan->plan_id - 1);
|
subplan->plan_id - 1);
|
||||||
|
|
||||||
/* ... and to its parent's state */
|
/*
|
||||||
|
* This check can fail if the planner mistakenly puts a parallel-unsafe
|
||||||
|
* subplan into a parallelized subquery; see ExecSerializePlan.
|
||||||
|
*/
|
||||||
|
if (sstate->planstate == NULL)
|
||||||
|
elog(ERROR, "subplan \"%s\" was not initialized",
|
||||||
|
subplan->plan_name);
|
||||||
|
|
||||||
|
/* Link to parent's state, too */
|
||||||
sstate->parent = parent;
|
sstate->parent = parent;
|
||||||
|
|
||||||
/* Initialize subexpressions */
|
/* Initialize subexpressions */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user