From 98eae6c762cb2c141c43b48bed41e7cc92be316e Mon Sep 17 00:00:00 2001 From: khizmax Date: Fri, 1 Jan 2016 16:41:16 +0300 Subject: [PATCH] Fixed memory ordering --- cds/urcu/details/gp.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cds/urcu/details/gp.h b/cds/urcu/details/gp.h index 3f6dc83f..7cde5db0 100644 --- a/cds/urcu/details/gp.h +++ b/cds/urcu/details/gp.h @@ -40,7 +40,7 @@ namespace cds { namespace urcu { namespace details { uint32_t tmp = pRec->m_nAccessControl.load( atomics::memory_order_relaxed ); if ( (tmp & rcu_class::c_nNestMask) == 0 ) { pRec->m_nAccessControl.store( gp_singleton::instance()->global_control_word(atomics::memory_order_relaxed), - atomics::memory_order_relaxed ); + atomics::memory_order_release ); atomics::atomic_thread_fence( atomics::memory_order_acquire ); CDS_COMPILER_RW_BARRIER; } @@ -73,7 +73,7 @@ namespace cds { namespace urcu { namespace details { template inline bool gp_singleton::check_grace_period( typename gp_singleton::thread_record * pRec ) const { - uint32_t const v = pRec->m_nAccessControl.load( atomics::memory_order_relaxed ); + uint32_t const v = pRec->m_nAccessControl.load( atomics::memory_order_acquire ); return (v & general_purpose_rcu::c_nNestMask) && ((( v ^ m_nGlobalControl.load( atomics::memory_order_relaxed )) & ~general_purpose_rcu::c_nNestMask )); } -- 2.34.1