From 5e5245076ea8105dab88c2bfd2ad90a96b48dbdd Mon Sep 17 00:00:00 2001
From: "lingce.ldm" <lingce.ldm@alibaba-inc.com>
Date: Fri, 25 Oct 2019 14:49:49 +0800
Subject: [PATCH] Fix two bugs for synchronous replication

---
 src/backend/replication/syncrep.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index a21f7d3..7b09d0f 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -261,10 +261,10 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
 		if (QueryCancelPending)
 		{
 			QueryCancelPending = false;
+			SyncRepCancelWait();
 			ereport(WARNING,
 					(errmsg("canceling wait for synchronous replication due to user request"),
 					 errdetail("The transaction has already committed locally, but might not have been replicated to the standby.")));
-			SyncRepCancelWait();
 			break;
 		}
 
@@ -361,12 +361,10 @@ SyncRepCancelWait(void)
 void
 SyncRepCleanupAtProcExit(void)
 {
+	LWLockAcquire(SyncRepLock, LW_EXCLUSIVE);
 	if (!SHMQueueIsDetached(&(MyProc->syncRepLinks)))
-	{
-		LWLockAcquire(SyncRepLock, LW_EXCLUSIVE);
 		SHMQueueDelete(&(MyProc->syncRepLinks));
-		LWLockRelease(SyncRepLock);
-	}
+	LWLockRelease(SyncRepLock);
 }
 
 /*
-- 
2.9.2

