IterableList: fixed memory ordering bugs found by TSan
[libcds.git] / cds / intrusive / impl / iterable_list.h
index 54fb2c9ce1c034b701a75b8fa13887e680ce9675..fc5fb14a4e84f8390cee565d897ff735e4f1fb4a 100644 (file)
@@ -1096,7 +1096,7 @@ namespace cds { namespace intrusive {
             while ( true ) {
                 node_type * pCur = pPrev->next.load( memory_model::memory_order_relaxed );
 
-                if ( pCur == pCur->next.load( memory_model::memory_order_relaxed )) {
+                if ( pCur == pCur->next.load( memory_model::memory_order_acquire )) {
                     // end-of-list
                     pos.pPrev = pPrev;
                     pos.pCur = pCur;
@@ -1134,7 +1134,7 @@ namespace cds { namespace intrusive {
             while ( true ) {
                 node_type * pCur = pPrev->next.load( memory_model::memory_order_relaxed );
 
-                if ( pCur == pCur->next.load( memory_model::memory_order_relaxed ) ) {
+                if ( pCur == pCur->next.load( memory_model::memory_order_acquire )) {
                     // end-of-list
                     pos.pPrev = pPrev;
                     pos.pCur = pCur;