diff options
author | Thomas Munro <tmunro@postgresql.org> | 2019-11-16 10:04:52 +1300 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2019-11-16 10:11:30 +1300 |
commit | 76cbfcdf3a0dff3f029ca079701418b861ce86c8 (patch) | |
tree | c27cea514c518fc8d603bf0ec87f3e5c99c70d77 /src/backend/executor/execMain.c | |
parent | 6ae4d271879b62c4325df3ddf75bff3f2b911086 (diff) | |
download | postgresql-76cbfcdf3a0dff3f029ca079701418b861ce86c8.tar.gz postgresql-76cbfcdf3a0dff3f029ca079701418b861ce86c8.zip |
Always call ExecShutdownNode() if appropriate.
Call ExecShutdownNode() after ExecutePlan()'s loop, rather than at each
break. We had forgotten to do that in one case. The omission caused
intermittent "temporary file leak" warnings from multi-batch parallel
hash joins with a LIMIT clause.
Back-patch to 11. Though the problem exists in theory in earlier
parallel query releases, nothing really depended on it.
Author: Kyotaro Horiguchi
Reviewed-by: Thomas Munro, Amit Kapila
Discussion: https://postgr.es/m/20191111.212418.2222262873417235945.horikyota.ntt%40gmail.com
Diffstat (limited to 'src/backend/executor/execMain.c')
-rw-r--r-- | src/backend/executor/execMain.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index ea4b5869848..c46eb8d6468 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -1650,15 +1650,7 @@ ExecutePlan(EState *estate, * process so we just end the loop... */ if (TupIsNull(slot)) - { - /* - * If we know we won't need to back up, we can release resources - * at this point. - */ - if (!(estate->es_top_eflags & EXEC_FLAG_BACKWARD)) - (void) ExecShutdownNode(planstate); break; - } /* * If we have a junk filter, then project a new tuple with the junk @@ -1701,17 +1693,16 @@ ExecutePlan(EState *estate, */ current_tuple_count++; if (numberTuples && numberTuples == current_tuple_count) - { - /* - * If we know we won't need to back up, we can release resources - * at this point. - */ - if (!(estate->es_top_eflags & EXEC_FLAG_BACKWARD)) - (void) ExecShutdownNode(planstate); break; - } } + /* + * If we know we won't need to back up, we can release resources at this + * point. + */ + if (!(estate->es_top_eflags & EXEC_FLAG_BACKWARD)) + (void) ExecShutdownNode(planstate); + if (use_parallel_mode) ExitParallelMode(); } |