diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c
index 4a8a59e..2843e42 100644
--- a/src/backend/executor/nodeGatherMerge.c
+++ b/src/backend/executor/nodeGatherMerge.c
@@ -311,6 +311,12 @@ ExecShutdownGatherMerge(GatherMergeState *node)
 static void
 ExecShutdownGatherMergeWorkers(GatherMergeState *node)
 {
+	/*
+	 * Free any unused tuples, so we don't leak memory across rescans or after
+	 * shutdown.
+	 */
+	gather_merge_clear_tuples(node);
+
 	if (node->pei != NULL)
 		ExecParallelFinish(node->pei);
 
@@ -335,9 +341,6 @@ ExecReScanGatherMerge(GatherMergeState *node)
 	/* Make sure any existing workers are gracefully shut down */
 	ExecShutdownGatherMergeWorkers(node);
 
-	/* Free any unused tuples, so we don't leak memory across rescans */
-	gather_merge_clear_tuples(node);
-
 	/* Mark node so that shared state will be rebuilt at next call */
 	node->initialized = false;
 	node->gm_initialized = false;
