]> granicus.if.org Git - postgresql/commitdiff
Consistently allow reading of messages from a detached shm_mq.
authorRobert Haas <rhaas@postgresql.org>
Wed, 30 Apr 2014 21:38:18 +0000 (17:38 -0400)
committerRobert Haas <rhaas@postgresql.org>
Wed, 30 Apr 2014 21:38:18 +0000 (17:38 -0400)
This was intended to work always, but the previous code only allowed
it if at least one message was successfully read by the receiver
before the sender detached the queue.

Report by Petr Jelinek.  Patch by me.

src/backend/storage/ipc/shm_mq.c

index c70f3bfb4580052b4f17832ab3d548643661ed16..4f7dd9c4ef1d81ccf5e2213af5a79ee3b9629e3d 100644 (file)
@@ -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;