diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c
index c70f3bfb4580052b4f17832ab3d548643661ed16..4f7dd9c4ef1d81ccf5e2213af5a79ee3b9629e3d 100644
--- a/src/backend/storage/ipc/shm_mq.c
+++ b/src/backend/storage/ipc/shm_mq.c
@@ -406,7 +406,8 @@ shm_mq_receive(shm_mq_handle *mqh, Size *nbytesp, void **datap, bool nowait)
 			if (shm_mq_get_sender(mq) == NULL)
 				return SHM_MQ_WOULD_BLOCK;
 		}
-		else if (!shm_mq_wait_internal(mq, &mq->mq_sender, mqh->mqh_handle))
+		else if (!shm_mq_wait_internal(mq, &mq->mq_sender, mqh->mqh_handle)
+				 && shm_mq_get_sender(mq) == NULL)
 		{
 			mq->mq_detached = true;
 			return SHM_MQ_DETACHED;