From: khizmax Date: Sat, 8 Jul 2017 07:11:30 +0000 (+0300) Subject: Fixed memory ordering X-Git-Tag: v2.3.0~6 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=136b2022a6fce6230cd5cdf377a3034332f0aafd;p=libcds.git Fixed memory ordering --- diff --git a/cds/sync/pool_monitor.h b/cds/sync/pool_monitor.h index 095e7210..43742382 100644 --- a/cds/sync/pool_monitor.h +++ b/cds/sync/pool_monitor.h @@ -196,7 +196,7 @@ namespace cds { namespace sync { // try lock spin and increment reference counter refspin_type cur = p.m_SyncMonitorInjection.m_RefSpin.load( atomics::memory_order_relaxed ) & ~c_nSpinBit; if ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur + c_nRefIncrement + c_nSpinBit, - atomics::memory_order_acquire, atomics::memory_order_acquire )) + atomics::memory_order_acq_rel, atomics::memory_order_acquire )) { back_off bkoff; do { @@ -204,7 +204,7 @@ namespace cds { namespace sync { bkoff(); cur &= ~c_nSpinBit; } while ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur + c_nRefIncrement + c_nSpinBit, - atomics::memory_order_acquire, atomics::memory_order_acquire )); + atomics::memory_order_acq_rel, atomics::memory_order_acquire )); } // spin locked