diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c index 40df8e1251e..0960e5a18f3 100644 --- a/src/backend/storage/ipc/shm_mq.c +++ b/src/backend/storage/ipc/shm_mq.c @@ -826,6 +826,8 @@ shm_mq_detach_internal(shm_mq *mq) { PGPROC *victim; + pg_write_barrier(); + SpinLockAcquire(&mq->mq_mutex); if (mq->mq_sender == MyProc) victim = mq->mq_receiver; @@ -1058,7 +1060,15 @@ shm_mq_receive_bytes(shm_mq_handle *mqh, Size bytes_needed, bool nowait, * detached. */ if (mq->mq_detached) + { + pg_read_barrier(); + if (written != pg_atomic_read_u64(&mq->mq_bytes_written)) + { + elog(LOG, "XXX"); + continue; + } return SHM_MQ_DETACHED; + } /* * We didn't get enough data to satisfy the request, so mark any data