Hello hackers, it is possible to start bgworker with bgw_start_time = BgWorkerStart_PostmasterStart, which will be started immediately after postmaster.
But if you try to do a fast shutdown while postmaster still in the pmState == PM_STARTUP, bgworker will never get SIGTERM and postmaster will wait forever. At the same time, if you do immediate or smart shutdown, it works fine. The problem is in the pmdie function. Proposed fix attached. Regards, -- Alexander Kukushkin
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index a4b53b33cd..9b36941a20 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -2685,7 +2685,11 @@ pmdie(SIGNAL_ARGS) signal_child(BgWriterPID, SIGTERM); if (WalReceiverPID != 0) signal_child(WalReceiverPID, SIGTERM); - if (pmState == PM_RECOVERY) + if (pmState == PM_STARTUP) + { + SignalSomeChildren(SIGTERM, BACKEND_TYPE_BGWORKER); + } + else if (pmState == PM_RECOVERY) { SignalSomeChildren(SIGTERM, BACKEND_TYPE_BGWORKER);