From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix planner crash from pfree'ing a partial path that a GatherPat |
Date: | 2016-04-30 16:29:26 |
Message-ID: | E1awXlm-0003rq-RC@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers pgsql-hackers |
Fix planner crash from pfree'ing a partial path that a GatherPath uses.
We mustn't run generate_gather_paths() during add_paths_to_joinrel(),
because that function can be invoked multiple times for the same target
joinrel. Not only is it wasteful to build GatherPaths repeatedly, but
a later add_partial_path() could delete the partial path that a previously
created GatherPath depends on. Instead establish the convention that we
do generate_gather_paths() for a rel only just before set_cheapest().
The code was accidentally not broken for baserels, because as of today there
never is more than one partial path for a baserel. But that assumption
obviously has a pretty short half-life, so move the generate_gather_paths()
calls for those cases as well.
Also add some generic comments explaining how and why this all works.
Per fuzz testing by Andreas Seltenreich.
Report: <871t5pgwdt(dot)fsf(at)credativ(dot)de>
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/c45bf5751b6338488bd79ce777210285531da373
Modified Files
--------------
src/backend/optimizer/README | 15 ++++++++--
src/backend/optimizer/geqo/geqo_eval.c | 3 ++
src/backend/optimizer/path/allpaths.c | 50 ++++++++++++++++++++--------------
src/backend/optimizer/path/joinpath.c | 7 +----
src/backend/optimizer/util/pathnode.c | 30 ++++++++++++++++----
5 files changed, 71 insertions(+), 34 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2016-04-30 18:08:06 | pgsql: Small improvements to OPTIMIZER_DEBUG code. |
Previous Message | Tom Lane | 2016-04-30 14:54:51 | pgsql: Remove warning about num_sync being too large in synchronous_sta |
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2016-04-30 16:30:18 | Re: New 9.6 external sort guidance around temp_tablespaces and maintenance_work_mem |
Previous Message | Tom Lane | 2016-04-30 14:55:31 | Re: Support for N synchronous standby servers - take 2 |