commit b898b351e074fb3713c9ce5543b1da727239b7fe
Author: Masahiko Sawada <sawada.mshk@gmail.com>
Date:   Mon Apr 17 17:38:06 2017 +0900

    Register shmem_exit function to reset LogicalRepCtx->launcher_pid.

diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
index 8a8dfe8..2e4275d 100644
--- a/src/backend/replication/logical/launcher.c
+++ b/src/backend/replication/logical/launcher.c
@@ -73,6 +73,7 @@ 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 +482,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.
@@ -656,6 +668,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);
