diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 0dba25962ad88714cd288c2d8d834572b8326448..f6ae61060ec6cbbe50ef7b993cc13459b3057f43 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); @@ -480,6 +482,17 @@ logicalrep_worker_detach(void) LWLockRelease(LogicalRepWorkerLock); } +/* + * 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. * @@ -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); diff --git a/src/include/replication/logicallauncher.h b/src/include/replication/logicallauncher.h index 060946a096412cec92526264ba965963157b6b8d..0c2bf03a5fe9f98d0039edceafb561dfecea8122 100644 --- a/src/include/replication/logicallauncher.h +++ b/src/include/replication/logicallauncher.h @@ -21,7 +21,6 @@ extern void ApplyLauncherMain(Datum main_arg); extern Size ApplyLauncherShmemSize(void); extern void ApplyLauncherShmemInit(void); -extern void ApplyLauncherWakeup(void); extern void ApplyLauncherWakeupAtCommit(void); extern void AtCommit_ApplyLauncher(void);