From 82a1e45e80d6699dd0a70066c692138b8c1b470f Mon Sep 17 00:00:00 2001
From: "zhangwenjie" <757634191@qq.com>
Date: Fri, 14 Jun 2019 17:23:39 +0800
Subject: [PATCH] While synchronous_standby_names is like 'FIRST 3 (1,2)' or
 'ANY 22 (1,2,3)' and synchronous_commit > SYNCHRONOUS_COMMIT_REMOTE_WRITE,
 the processes will wait forever. It is dangerous, so check it in the
 beginning is necessary.

---
 src/backend/replication/syncrep.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index 577791f3d5..78bb056e05 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -1172,6 +1172,13 @@ check_synchronous_standby_names(char **newval, void **extra, GucSource source)
 							 syncrep_parse_result->num_sync);
 			return false;
 		}
+		
+		if (syncrep_parse_result->num_sync > syncrep_parse_result->nmembers)
+		{
+			GUC_check_errmsg("number of synchronous standbys (%d) must be smaller than or equal to number of potential synchronous standbys (%d)",
+							syncrep_parse_result->num_sync, syncrep_parse_result->nmembers);
+			return false;
+		}		
 
 		/* GUC extra value must be malloc'd, not palloc'd */
 		pconf = (SyncRepConfigData *)
-- 
2.19.1.3.ge56e4f7

