pgsql: Fix planner crash from pfree'ing a partial path that a GatherPat
От | Tom Lane |
---|---|
Тема | pgsql: Fix planner crash from pfree'ing a partial path that a GatherPat |
Дата | |
Msg-id | E1awXlm-0003rq-RC@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
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.fsf@credativ.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(-)
В списке pgsql-committers по дате отправления: