Commit 227d57f3 authored by Robert Haas's avatar Robert Haas

Don't dump core when destroying an unused ParallelContext.

If a transaction or subtransaction creates a ParallelContext but ends
without calling InitializeParallelDSM, the previous code would
seg fault.  Fix that.
parent 7d8db3e8
...@@ -513,14 +513,17 @@ DestroyParallelContext(ParallelContext *pcxt) ...@@ -513,14 +513,17 @@ DestroyParallelContext(ParallelContext *pcxt)
dlist_delete(&pcxt->node); dlist_delete(&pcxt->node);
/* Kill each worker in turn, and forget their error queues. */ /* 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) for (i = 0; i < pcxt->nworkers; ++i)
TerminateBackgroundWorker(pcxt->worker[i].bgwhandle);
if (pcxt->worker[i].error_mqh != NULL)
{ {
pfree(pcxt->worker[i].error_mqh); if (pcxt->worker[i].bgwhandle != NULL)
pcxt->worker[i].error_mqh = 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) ...@@ -550,7 +553,7 @@ DestroyParallelContext(ParallelContext *pcxt)
{ {
BgwHandleStatus status; BgwHandleStatus status;
if (pcxt->worker[i].bgwhandle == NULL) if (pcxt->worker == NULL || pcxt->worker[i].bgwhandle == NULL)
continue; continue;
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment