diff options
Diffstat (limited to 'src/backend/replication/logical/launcher.c')
-rw-r--r-- | src/backend/replication/logical/launcher.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index fecff936c07..7ba239c02c1 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -75,7 +75,10 @@ LogicalRepCtxStruct *LogicalRepCtx; static void logicalrep_worker_onexit(int code, Datum arg); static void logicalrep_worker_detach(void); -bool got_SIGTERM = false; +/* Flags set by signal handlers */ +volatile sig_atomic_t got_SIGHUP = false; +volatile sig_atomic_t got_SIGTERM = false; + static bool on_commit_launcher_wakeup = false; Datum pg_stat_get_subscription(PG_FUNCTION_ARGS); @@ -495,10 +498,28 @@ logicalrep_worker_onexit(int code, Datum arg) void logicalrep_worker_sigterm(SIGNAL_ARGS) { + int save_errno = errno; + got_SIGTERM = true; /* Waken anything waiting on the process latch */ SetLatch(MyLatch); + + errno = save_errno; +} + +/* SIGHUP: set flag to reload configuration at next convenient time */ +void +logicalrep_worker_sighup(SIGNAL_ARGS) +{ + int save_errno = errno; + + got_SIGHUP = true; + + /* Waken anything waiting on the process latch */ + SetLatch(MyLatch); + + errno = save_errno; } /* @@ -637,6 +658,7 @@ ApplyLauncherMain(Datum main_arg) (errmsg("logical replication launcher started"))); /* Establish signal handlers. */ + pqsignal(SIGHUP, logicalrep_worker_sighup); pqsignal(SIGTERM, logicalrep_worker_sigterm); BackgroundWorkerUnblockSignals(); @@ -728,6 +750,12 @@ ApplyLauncherMain(Datum main_arg) if (rc & WL_POSTMASTER_DEATH) proc_exit(1); + if (got_SIGHUP) + { + got_SIGHUP = false; + ProcessConfigFile(PGC_SIGHUP); + } + ResetLatch(&MyProc->procLatch); } |