Fixed uRCU barriers on read-side entry/exit
[libcds.git] / cds / urcu / details / sh.h
index f02c37a4cfe9b4e0619402489872a0ef4c620411..03ae2be633e1cdc238cca585e2f16f2cf69e7225 100644 (file)
@@ -74,13 +74,7 @@ namespace cds { namespace urcu { namespace details {
             pRec->m_nAccessControl.store( sh_singleton<RCUtag>::instance()->global_control_word(atomics::memory_order_relaxed),
                 atomics::memory_order_relaxed );
 
-#   if CDS_COMPILER == CDS_COMPILER_CLANG && CDS_COMPILER_VERSION < 30800
-            // Seems, CLang 3.6-3.7 cannot handle acquire barrier correctly
             CDS_COMPILER_RW_BARRIER;
-#   else
-            // acquire barrier
-            pRec->m_nAccessControl.load( atomics::memory_order_acquire );
-#   endif
         }
         else {
             // nested lock
@@ -97,7 +91,8 @@ namespace cds { namespace urcu { namespace details {
         uint32_t tmp = pRec->m_nAccessControl.load( atomics::memory_order_relaxed );
         assert( ( tmp & rcu_class::c_nNestMask ) > 0 );
 
-        pRec->m_nAccessControl.store( tmp - 1, atomics::memory_order_release );
+        CDS_COMPILER_RW_BARRIER;
+        pRec->m_nAccessControl.store( tmp - 1, atomics::memory_order_relaxed );
     }
 
     template <typename RCUtag>