diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 6eed6db3355..998566345bf 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -735,12 +735,11 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) instrument_options = instrumentation->instrument_options; queryDesc = ExecParallelGetQueryDesc(toc, receiver, instrument_options); - /* Prepare to track buffer usage during query execution. */ - InstrStartParallelQuery(); - /* Start up the executor, have it run the plan, and then shut it down. */ ExecutorStart(queryDesc, 0); ExecParallelInitializeWorker(queryDesc->planstate, toc); + /* Prepare to track buffer usage during query execution. */ + InstrStartParallelQuery(); ExecutorRun(queryDesc, ForwardScanDirection, 0L); ExecutorFinish(queryDesc); diff --git a/src/backend/executor/nodeLimit.c b/src/backend/executor/nodeLimit.c index faf32e1aeed..4ff8982cd5b 100644 --- a/src/backend/executor/nodeLimit.c +++ b/src/backend/executor/nodeLimit.c @@ -130,6 +130,8 @@ ExecLimit(LimitState *node) node->position - node->offset >= node->count) { node->lstate = LIMIT_WINDOWEND; + /* Allow nodes to release or shut down resources. */ + (void) ExecShutdownNode(outerPlan); return NULL; }