postgres.git / summary / log / commit / refs

commit    a1480ec1d3bacb9acb08ec09f22bc25bc033115b
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 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) [parent: 872101bede26]