|
|
|
|
@ -2856,23 +2856,25 @@ CleanupBackgroundWorker(int pid, |
|
|
|
|
* backend, any exit status other than 0 or 1 is considered a crash |
|
|
|
|
* and causes a system-wide restart. |
|
|
|
|
*/ |
|
|
|
|
if (rw->rw_worker.bgw_flags & BGWORKER_SHMEM_ACCESS) |
|
|
|
|
if ((rw->rw_worker.bgw_flags & BGWORKER_SHMEM_ACCESS) != 0) |
|
|
|
|
{ |
|
|
|
|
if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus)) |
|
|
|
|
{ |
|
|
|
|
HandleChildCrash(pid, exitstatus, namebuf); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!ReleasePostmasterChildSlot(rw->rw_child_slot)) |
|
|
|
|
{ |
|
|
|
|
/*
|
|
|
|
|
* Uh-oh, the child failed to clean itself up. Treat as a |
|
|
|
|
* crash after all. |
|
|
|
|
*/ |
|
|
|
|
HandleChildCrash(pid, exitstatus, namebuf); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
/*
|
|
|
|
|
* We must release the postmaster child slot whether this worker |
|
|
|
|
* is connected to shared memory or not, but we only treat it as |
|
|
|
|
* a crash if it is in fact connected. |
|
|
|
|
*/ |
|
|
|
|
if (!ReleasePostmasterChildSlot(rw->rw_child_slot) && |
|
|
|
|
(rw->rw_worker.bgw_flags & BGWORKER_SHMEM_ACCESS) != 0) |
|
|
|
|
{ |
|
|
|
|
HandleChildCrash(pid, exitstatus, namebuf); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Get it out of the BackendList and clear out remaining data */ |
|
|
|
|
|