diff options
Diffstat (limited to 'src/backend/replication/logical/launcher.c')
-rw-r--r-- | src/backend/replication/logical/launcher.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 0dba25962ad..f6ae61060ec 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -72,6 +72,8 @@ typedef struct LogicalRepCtxStruct LogicalRepCtxStruct *LogicalRepCtx; +static void ApplyLauncherWakeup(void); +static void logicalrep_launcher_onexit(int code, Datum arg); static void logicalrep_worker_onexit(int code, Datum arg); static void logicalrep_worker_detach(void); @@ -481,6 +483,17 @@ logicalrep_worker_detach(void) } /* + * Cleanup function for logical replication launcher. + * + * Called on logical replication launcher exit. + */ +static void +logicalrep_launcher_onexit(int code, Datum arg) +{ + LogicalRepCtx->launcher_pid = 0; +} + +/* * Cleanup function. * * Called on logical replication worker exit. @@ -643,10 +656,10 @@ ApplyLauncherWakeupAtCommit(void) on_commit_launcher_wakeup = true; } -void +static void ApplyLauncherWakeup(void) { - if (IsBackendPid(LogicalRepCtx->launcher_pid)) + if (LogicalRepCtx->launcher_pid != 0) kill(LogicalRepCtx->launcher_pid, SIGUSR1); } @@ -659,6 +672,8 @@ ApplyLauncherMain(Datum main_arg) ereport(DEBUG1, (errmsg("logical replication launcher started"))); + before_shmem_exit(logicalrep_launcher_onexit, (Datum) 0); + /* Establish signal handlers. */ pqsignal(SIGHUP, logicalrep_worker_sighup); pqsignal(SIGTERM, logicalrep_worker_sigterm); |