summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/replication/logical/slotsync.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c
index 051b1c866b5..27e262ecbf2 100644
--- a/src/backend/replication/logical/slotsync.c
+++ b/src/backend/replication/logical/slotsync.c
@@ -1156,10 +1156,10 @@ ProcessSlotSyncInterrupts(WalReceiverConn *wrconn)
{
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);
}
@@ -1390,7 +1390,7 @@ ReplSlotSyncWorkerMain(char *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);
@@ -1495,7 +1495,8 @@ ReplSlotSyncWorkerMain(char *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);
}
@@ -1582,8 +1583,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 (;;)