From a959c67cb73cf7cfe8b368632062c625c0e01858 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 23 Sep 2010 17:16:51 -0400
Subject: [PATCH] ProcessIncomingNotify *must* reset notifyInterruptOccurred
 when called.

This was broken in 9.0 by careless addition of an early-exit path.
Bug report and diagnosis by Jeff Davis.
---
 src/backend/commands/async.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index 9ff00b768cd..a9923341147 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -2090,7 +2090,10 @@ ProcessIncomingNotify(void)
 {
 	bool		catchup_enabled;
 
-	/* Do nothing if we aren't actively listening */
+	/* We *must* reset the flag */
+	notifyInterruptOccurred = 0;
+
+	/* Do nothing else if we aren't actively listening */
 	if (listenChannels == NIL)
 		return;
 
@@ -2102,8 +2105,6 @@ ProcessIncomingNotify(void)
 
 	set_ps_display("notify interrupt", false);
 
-	notifyInterruptOccurred = 0;
-
 	/*
 	 * We must run asyncQueueReadAllNotifications inside a transaction, else
 	 * bad things happen if it gets an error.
-- 
GitLab