[TSan] Tuning memory order
[libcds.git] / cds / urcu / details / base.h
index 84bf8fb85a205449775f35a5d237443eca2de05d..21676d82f6b688e9c1b5ad1399ec45384412dd89 100644 (file)
@@ -375,12 +375,12 @@ namespace cds {
                     // No records available for reuse
                     // Allocate and push a new record
                     pRec = allocator_type().New( curThreadId );
-                    CDS_COMPILER_RW_BARRIER;
 
                     thread_record * pOldHead = m_pHead.load( atomics::memory_order_acquire );
                     do {
+                        // Compiler barriers: assignment MUST BE inside the loop
+                        CDS_COMPILER_RW_BARRIER;
                         pRec->m_list.m_pNext = pOldHead;
-                        // Compiler barrier: assignment above MUST BE inside the loop
                         CDS_COMPILER_RW_BARRIER;
                     } while ( !m_pHead.compare_exchange_weak( pOldHead, pRec, atomics::memory_order_acq_rel, atomics::memory_order_acquire ));