diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c index 31d7cb3ca77..7e3b4c4413e 100644 --- a/src/backend/replication/logical/slotsync.c +++ b/src/backend/replication/logical/slotsync.c @@ -1254,10 +1254,10 @@ ProcessSlotSyncInterrupts(void) { CHECK_FOR_INTERRUPTS(); - if (ShutdownRequestPending) + if (SlotSyncCtx->stopSignaled) { ereport(LOG, - errmsg("replication slot synchronization worker is shutting down on receiving SIGINT")); + errmsg("replication slot synchronization worker is shutting down because promotion is triggered")); proc_exit(0); } @@ -1488,7 +1488,7 @@ ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len) /* Setup signal handling */ pqsignal(SIGHUP, SignalHandlerForConfigReload); - pqsignal(SIGINT, SignalHandlerForShutdownRequest); + pqsignal(SIGINT, StatementCancelHandler); pqsignal(SIGTERM, die); pqsignal(SIGFPE, FloatExceptionHandler); pqsignal(SIGUSR1, procsignal_sigusr1_handler); @@ -1595,7 +1595,8 @@ ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len) /* * The slot sync worker can't get here because it will only stop when it - * receives a SIGINT from the startup process, or when there is an error. + * receives a stop request from the startup process, or when there is an + * error. */ Assert(false); } @@ -1680,8 +1681,12 @@ ShutDownSlotSync(void) SpinLockRelease(&SlotSyncCtx->mutex); + /* + * Signal slotsync worker if it was still running. The worker will stop + * upon detecting that the stopSignaled flag is set to true. + */ if (worker_pid != InvalidPid) - kill(worker_pid, SIGINT); + kill(worker_pid, SIGUSR1); /* Wait for slot sync to end */ for (;;)