1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-03 22:24:49 +03:00

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.
This commit is contained in:
Robert Haas 2015-10-22 22:01:11 -04:00
parent 87abcb4ebd
commit 5eca6cf994

View File

@ -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)