diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c
index b6e82d1664f83dedcdf1e1eb8e8e35071ffcff76..f8c1ba637d316028a984dce5749de76f5139c37b 100644
--- a/src/backend/executor/nodeGather.c
+++ b/src/backend/executor/nodeGather.c
@@ -190,7 +190,7 @@ ExecGather(GatherState *node)
 
 			/* No workers?  Then never mind. */
 			if (!got_any_worker)
-				ExecShutdownGather(node);
+				ExecShutdownGatherWorkers(node);
 		}
 
 		/* Run plan locally if no workers or not single-copy. */
@@ -402,6 +402,8 @@ ExecShutdownGatherWorkers(GatherState *node)
 
 		for (i = 0; i < node->nreaders; ++i)
 			DestroyTupleQueueReader(node->reader[i]);
+
+		pfree(node->reader);
 		node->reader = NULL;
 	}