mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Notify bgworker registrant after freeing worker slot.
Tom Lane observed buildfarm failures caused by the select_parallel regression test trying to launch new parallel queries before the worker slots used by the previous ones were freed. Try to fix this by having the postmaster free the worker slots before it sends the SIGUSR1 notifications to the registering process. This doesn't completely eliminate the possibility that the user backend might (correctly) observe the worker as dead before the slot is free, but I believe it should make the window significantly narrower. Patch by me, per complaint from Tom Lane. Reviewed by Amit Kapila. Discussion: http://postgr.es/m/30673.1487310734@sss.pgh.pa.us
This commit is contained in:
@@ -3050,9 +3050,9 @@ CleanupBackgroundWorker(int pid,
|
||||
int exitstatus) /* child's exit status */
|
||||
{
|
||||
char namebuf[MAXPGPATH];
|
||||
slist_iter iter;
|
||||
slist_mutable_iter iter;
|
||||
|
||||
slist_foreach(iter, &BackgroundWorkerList)
|
||||
slist_foreach_modify(iter, &BackgroundWorkerList)
|
||||
{
|
||||
RegisteredBgWorker *rw;
|
||||
|
||||
@@ -3126,7 +3126,7 @@ CleanupBackgroundWorker(int pid,
|
||||
rw->rw_backend = NULL;
|
||||
rw->rw_pid = 0;
|
||||
rw->rw_child_slot = 0;
|
||||
ReportBackgroundWorkerPID(rw); /* report child death */
|
||||
ReportBackgroundWorkerExit(&iter); /* report child death */
|
||||
|
||||
LogChildExit(EXIT_STATUS_0(exitstatus) ? DEBUG1 : LOG,
|
||||
namebuf, pid, exitstatus);
|
||||
|
||||
Reference in New Issue
Block a user