From a1480ec1d3bacb9acb08ec09f22bc25bc033115b Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Thu, 22 Oct 2015 22:01:11 -0400
Subject: [PATCH] shm_mq: Repair breakage from previous commit.

If the counterparty writes some data into the queue and then detaches,
it's wrong to return SHM_MQ_DETACHED right away.  If we do that, we
fail to read whatever was written.
---
 src/backend/storage/ipc/shm_mq.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c
index 61f9298489d..1d0657f3858 100644
--- a/src/backend/storage/ipc/shm_mq.c
+++ b/src/backend/storage/ipc/shm_mq.c
@@ -501,10 +501,12 @@ shm_mq_receive(shm_mq_handle *mqh, Size *nbytesp, void **datap, bool nowait)
 	{
 		if (nowait)
 		{
-			if (shm_mq_counterparty_gone(mq, mqh->mqh_handle))
-				return SHM_MQ_DETACHED;
 			if (shm_mq_get_sender(mq) == NULL)
+			{
+				if (shm_mq_counterparty_gone(mq, mqh->mqh_handle))
+					return SHM_MQ_DETACHED;
 				return SHM_MQ_WOULD_BLOCK;
+			}
 		}
 		else if (!shm_mq_wait_internal(mq, &mq->mq_sender, mqh->mqh_handle)
 				 && shm_mq_get_sender(mq) == NULL)
-- 
GitLab