/*
* If the counterparty is known to have attached, we can read mq_receiver
- * without acquiring the spinlock and assume it isn't NULL. Otherwise,
- * more caution is needed.
+ * without acquiring the spinlock. Otherwise, more caution is needed.
*/
if (mqh->mqh_counterparty_attached)
receiver = mq->mq_receiver;
SpinLockAcquire(&mq->mq_mutex);
receiver = mq->mq_receiver;
SpinLockRelease(&mq->mq_mutex);
- if (receiver == NULL)
- return SHM_MQ_SUCCESS;
- mqh->mqh_counterparty_attached = true;
+ if (receiver != NULL)
+ mqh->mqh_counterparty_attached = true;
}
/*
if (force_flush || mqh->mqh_send_pending > (mq->mq_ring_size >> 2))
{
shm_mq_inc_bytes_written(mq, mqh->mqh_send_pending);
- SetLatch(&receiver->procLatch);
+ if (receiver != NULL)
+ SetLatch(&receiver->procLatch);
mqh->mqh_send_pending = 0;
}
int iovcnt, bool nowait, bool force_flush);
extern shm_mq_result shm_mq_receive(shm_mq_handle *mqh,
Size *nbytesp, void **datap, bool nowait);
-extern void shm_mq_flush(shm_mq_handle *mqh);
/* Wait for our counterparty to attach to the queue. */
extern shm_mq_result shm_mq_wait_for_attach(shm_mq_handle *mqh);