postgres.git / summary / log / commit / refs
commit 5eca6cf99411bfd47f43fc742552c9a2ae459bc8
Author: Robert Haas <rhaas@postgresql.org>
Date: Fri Oct 23 02:01:11 2015 +0000
First released in: 9.6.0, 9.4.6, 9.5.0
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 296f0bda40c..c386b2207a1 100644
--- a/src/backend/storage/ipc/shm_mq.c
+++ b/src/backend/storage/ipc/shm_mq.c
@@ -405,10 +405,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)
[parent: 87abcb4ebd48]