summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro2019-11-15 21:04:52 +0000
committerThomas Munro2019-11-15 21:11:30 +0000
commit76cbfcdf3a0dff3f029ca079701418b861ce86c8 (patch)
treec27cea514c518fc8d603bf0ec87f3e5c99c70d77
parent6ae4d271879b62c4325df3ddf75bff3f2b911086 (diff)
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
-rw-r--r--src/backend/executor/execMain.c23
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();
}