diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index f4ba8518b1215d218dc1b8561f6ad83fe9f9bdc5..29d6ed57cc251b290104c3a8faae5ab3c8302567 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -513,14 +513,17 @@ DestroyParallelContext(ParallelContext *pcxt) dlist_delete(&pcxt->node); /* Kill each worker in turn, and forget their error queues. */ - for (i = 0; i < pcxt->nworkers; ++i) + if (pcxt->worker != NULL) { - if (pcxt->worker[i].bgwhandle != NULL) - TerminateBackgroundWorker(pcxt->worker[i].bgwhandle); - if (pcxt->worker[i].error_mqh != NULL) + for (i = 0; i < pcxt->nworkers; ++i) { - pfree(pcxt->worker[i].error_mqh); - pcxt->worker[i].error_mqh = NULL; + if (pcxt->worker[i].bgwhandle != NULL) + TerminateBackgroundWorker(pcxt->worker[i].bgwhandle); + if (pcxt->worker[i].error_mqh != NULL) + { + pfree(pcxt->worker[i].error_mqh); + pcxt->worker[i].error_mqh = NULL; + } } } @@ -550,7 +553,7 @@ DestroyParallelContext(ParallelContext *pcxt) { BgwHandleStatus status; - if (pcxt->worker[i].bgwhandle == NULL) + if (pcxt->worker == NULL || pcxt->worker[i].bgwhandle == NULL) continue; /*