Hi,

On 2024-08-12 12:55:00 +0300, Heikki Linnakangas wrote:
> @@ -2864,6 +2777,8 @@ PostmasterStateMachine(void)
>        */
>       if (pmState == PM_STOP_BACKENDS)
>       {
> +             uint32          targetMask;
> +
>               /*
>                * Forget any pending requests for background workers, since 
> we're no
>                * longer willing to launch any new workers.  (If additional 
> requests
> @@ -2871,29 +2786,27 @@ PostmasterStateMachine(void)
>                */
>               ForgetUnstartedBackgroundWorkers();
>  
> -             /* Signal all backend children except walsenders and dead-end 
> backends */
> -             SignalSomeChildren(SIGTERM,
> -                                                BACKEND_TYPE_ALL & ~(1 << 
> B_WAL_SENDER | 1 << B_DEAD_END_BACKEND));
> +             /* Signal all backend children except walsenders */
> +             /* dead-end children are not signalled yet */
> +             targetMask = (1 << B_BACKEND);
> +             targetMask |= (1 << B_BG_WORKER);
> +
>               /* and the autovac launcher too */
> -             if (AutoVacPID != 0)
> -                     signal_child(AutoVacPID, SIGTERM);
> +             targetMask |= (1 << B_AUTOVAC_LAUNCHER);
>               /* and the bgwriter too */
> -             if (BgWriterPID != 0)
> -                     signal_child(BgWriterPID, SIGTERM);
> +             targetMask |= (1 << B_BG_WRITER);
>               /* and the walwriter too */
> -             if (WalWriterPID != 0)
> -                     signal_child(WalWriterPID, SIGTERM);
> +             targetMask |= (1 << B_WAL_WRITER);
>               /* If we're in recovery, also stop startup and walreceiver 
> procs */
> -             if (StartupPID != 0)
> -                     signal_child(StartupPID, SIGTERM);
> -             if (WalReceiverPID != 0)
> -                     signal_child(WalReceiverPID, SIGTERM);
> -             if (WalSummarizerPID != 0)
> -                     signal_child(WalSummarizerPID, SIGTERM);
> -             if (SlotSyncWorkerPID != 0)
> -                     signal_child(SlotSyncWorkerPID, SIGTERM);
> +             targetMask |= (1 << B_STARTUP);
> +             targetMask |= (1 << B_WAL_RECEIVER);
> +
> +             targetMask |= (1 << B_WAL_SUMMARIZER);
> +             targetMask |= (1 << B_SLOTSYNC_WORKER);
>               /* checkpointer, archiver, stats, and syslogger may continue 
> for now */
>  
> +             SignalSomeChildren(SIGTERM, targetMask);
> +
>               /* Now transition to PM_WAIT_BACKENDS state to wait for them to 
> die */
>               pmState = PM_WAIT_BACKENDS;
>       }

I think this might now omit shutting down at least autovac workers, which
afaict previously were included.

Greetings,

Andres Freund


Reply via email to