Fixed MichaelList<RCU> memory ordering
authorkhizmax <libcds.dev@gmail.com>
Fri, 12 Jun 2015 21:03:45 +0000 (00:03 +0300)
committerkhizmax <libcds.dev@gmail.com>
Fri, 12 Jun 2015 21:03:45 +0000 (00:03 +0300)
cds/intrusive/michael_list_rcu.h

index 59ee10acf7a2aeb05af1449c28964da16ed9795e..c8f8030348bb6e8e93cab6bd7a70393b34b9f81f 100644 (file)
@@ -235,7 +235,7 @@ namespace cds { namespace intrusive {
             // Mark the node (logical deletion)
             marked_node_ptr next(pos.pNext, 0);
 
-            if ( pos.pCur->m_pNext.compare_exchange_strong( next, next | nMask, memory_model::memory_order_acq_rel, atomics::memory_order_relaxed )) {
+            if ( pos.pCur->m_pNext.compare_exchange_strong( next, next | nMask, memory_model::memory_order_release, atomics::memory_order_relaxed )) {
 
                 // Try physical removal - fast path
                 marked_node_ptr cur(pos.pCur);
@@ -1056,8 +1056,8 @@ namespace cds { namespace intrusive {
 
                 pNext = pCur->m_pNext.load(memory_model::memory_order_acquire);
 
-                if ( pPrev->load(memory_model::memory_order_relaxed) != pCur
-                    || pNext != pCur->m_pNext.load(memory_model::memory_order_relaxed))
+                if ( pPrev->load(memory_model::memory_order_acquire) != pCur
+                    || pNext != pCur->m_pNext.load(memory_model::memory_order_acquire))
                 {
                     bkoff();
                     goto try_again;