From 6aa858c0f759660728e31383cb792f1885f9c9a7 Mon Sep 17 00:00:00 2001 From: rossb Date: Thu, 18 Aug 2011 11:47:28 +0000 Subject: [PATCH] memory barrier change take two --- src/common/pa_ringbuffer.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/common/pa_ringbuffer.c b/src/common/pa_ringbuffer.c index 28a59b7..93b3e43 100644 --- a/src/common/pa_ringbuffer.c +++ b/src/common/pa_ringbuffer.c @@ -127,10 +127,8 @@ ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, rin *sizePtr2 = 0; } - /* fixme: do we want a memory barrier here for write-after-read / acquire ? if( available ) - PaUtil_WriteMemoryBarrier(); / * (write-after-read? / acquire) * / - */ + PaUtil_FullMemoryBarrier(); /* (write-after-read) => full barrier */ return elementCount; } @@ -140,8 +138,8 @@ ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, rin */ ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount ) { - /* we need to ensure that previous writes are seen before we update the write index - (write after write / release) + /* ensure that previous writes are seen before we update the write index + (write after write) */ PaUtil_WriteMemoryBarrier(); return rbuf->writeIndex = (rbuf->writeIndex + elementCount) & rbuf->bigMask; @@ -180,7 +178,7 @@ ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring } if( available ) - PaUtil_ReadMemoryBarrier(); /* (read-after-read / acquire) */ + PaUtil_ReadMemoryBarrier(); /* (read-after-read) => read barrier */ return elementCount; } @@ -188,10 +186,10 @@ ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring */ ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount ) { - /* ensure that previous reads (copies out of the ring buffer) are always completed before updating the read index. - (write-after-read / release) + /* ensure that previous reads (copies out of the ring buffer) are always completed before updating (writing) the read index. + (write-after-read) => full barrier */ - PaUtil_WriteMemoryBarrier(); + PaUtil_FullMemoryBarrier(); return rbuf->readIndex = (rbuf->readIndex + elementCount) & rbuf->bigMask; } -- 2.43.0