From: Peter Eisentraut Date: Mon, 1 May 2017 14:18:09 +0000 (-0400) Subject: Fix logical replication launcher wake up and reset X-Git-Tag: REL_10_BETA1~131 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9414e41ea703ea5fcc288bcf7dc000e53306896b;p=postgresql Fix logical replication launcher wake up and reset After the logical replication launcher was told to wake up at commit (for example, by a CREATE SUBSCRIPTION command), the flag to wake up was not reset, so it would be woken up at every following commit as well. So fix that by resetting the flag. Also, we don't need to wake up anything if the transaction was rolled back. Just reset the flag in that case. Author: Masahiko Sawada Reported-by: Fujii Masao --- diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 605639b0c3..a3ff1b22f0 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2138,7 +2138,7 @@ CommitTransaction(void) AtEOXact_HashTables(true); AtEOXact_PgStat(true); AtEOXact_Snapshot(true, false); - AtCommit_ApplyLauncher(); + AtEOXact_ApplyLauncher(true); pgstat_report_xact_timestamp(0); CurrentResourceOwner = NULL; @@ -2612,6 +2612,7 @@ AbortTransaction(void) AtEOXact_ComboCid(); AtEOXact_HashTables(false); AtEOXact_PgStat(false); + AtEOXact_ApplyLauncher(false); pgstat_report_xact_timestamp(0); } diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index f5058d5a9a..09c87d7c53 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -748,10 +748,12 @@ ApplyLauncherShmemInit(void) * Wakeup the launcher on commit if requested. */ void -AtCommit_ApplyLauncher(void) +AtEOXact_ApplyLauncher(bool isCommit) { - if (on_commit_launcher_wakeup) + if (isCommit && on_commit_launcher_wakeup) ApplyLauncherWakeup(); + + on_commit_launcher_wakeup = false; } /* diff --git a/src/include/replication/logicallauncher.h b/src/include/replication/logicallauncher.h index 0c2bf03a5f..fb3c2f5370 100644 --- a/src/include/replication/logicallauncher.h +++ b/src/include/replication/logicallauncher.h @@ -22,6 +22,6 @@ extern Size ApplyLauncherShmemSize(void); extern void ApplyLauncherShmemInit(void); extern void ApplyLauncherWakeupAtCommit(void); -extern void AtCommit_ApplyLauncher(void); +extern void AtEOXact_ApplyLauncher(bool isCommit); #endif /* LOGICALLAUNCHER_H */