]> Repos - portaudio/commitdiff
memory barrier change take two
authorrossb <rossb@0f58301d-fd10-0410-b4af-bbb618454e57>
Thu, 18 Aug 2011 11:47:28 +0000 (11:47 +0000)
committerrossb <rossb@0f58301d-fd10-0410-b4af-bbb618454e57>
Thu, 18 Aug 2011 11:47:28 +0000 (11:47 +0000)
src/common/pa_ringbuffer.c

index 28a59b7e39c5f53f59d6625c5625a65a3026428e..93b3e430a51064a313799b301e0134769df1086d 100644 (file)
@@ -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;
 }