From 9c0e2b918252e753ea648dd6a7c18a054bed951b Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Mon, 8 Oct 2012 13:22:04 +0300
Subject: [PATCH] Fix walsender handling of postmaster shutdown, to not go into
 endless loop.

This bug was introduced by my patch to use the regular die/quickdie signal
handlers in walsender processes. I tried to make walsender exit at next
CHECK_FOR_INTERRUPTS() by setting ProcDiePending, but that's not enough, you
need to set InterruptPending too. On second thoght, it was not a very good
way to make walsender exit anyway, so use proc_exit(0) instead.

Also, send a CommandComplete message before exiting; that's what we did
before, and you get a nicer error message in the standby that way.

Reported by Thom Brown.
---
 src/backend/replication/walsender.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index 0ba2ad44140..9207a48910b 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -711,8 +711,11 @@ WalSndLoop(void)
 				XLogSend(output_message, &caughtup);
 				if (caughtup && !pq_is_send_pending())
 				{
-					ProcDiePending = true;
-					continue;	/* don't want to wait more */
+					/* Inform the standby that XLOG streaming is done */
+					pq_puttextmessage('C', "COPY 0");
+					pq_flush();
+
+					proc_exit(0);
 				}
 			}
 		}
-- 
GitLab