aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFujii Masao <fujii@postgresql.org>2017-04-19 02:16:34 +0900
committerFujii Masao <fujii@postgresql.org>2017-04-19 02:16:34 +0900
commit280c53ecfbcad442c4b5eaab4cc3e65408f486eb (patch)
tree699f552da0add70fd9e89b46cef1f2e83d55fea6 /src
parent39a6772d04940b994acd9a3fd954cacdc2f88b26 (diff)
downloadpostgresql-280c53ecfbcad442c4b5eaab4cc3e65408f486eb.tar.gz
postgresql-280c53ecfbcad442c4b5eaab4cc3e65408f486eb.zip
A collection of small fixes for logical replication.
* Be sure to reset the launcher's pid (LogicalRepCtx->launcher_pid) to 0 even when the launcher emits an error. * Declare ApplyLauncherWakeup() as a static function because it's called only in launcher.c. * Previously IsBackendPId() was used to check whether the launcher's pid was valid. IsBackendPid() was necessary because there was the bug where the launcher's pid was not reset to 0. But now it's fixed, so IsBackendPid() is not necessary and this patch removes it. Author: Masahiko Sawada Reviewed-by: Kyotaro Horiguchi Reported-by: Fujii Masao Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/logical/launcher.c19
-rw-r--r--src/include/replication/logicallauncher.h1
2 files changed, 17 insertions, 3 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);
diff --git a/src/include/replication/logicallauncher.h b/src/include/replication/logicallauncher.h
index 060946a0964..0c2bf03a5fe 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);