When a bgworker exits, always call ReleasePostmasterChildSlot.
Commit e2ce9aa27b
was insufficiently
well thought out. Repair.
This commit is contained in:
parent
970d1f76d1
commit
eee6cf1f33
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue