From: khizmax Date: Fri, 13 Mar 2015 09:47:31 +0000 (+0300) Subject: small refactoring of pool monitor X-Git-Tag: v2.1.0~305^2~7 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0f9de05c6d8aa9c5c807b9502ada7f776d40c526;p=libcds.git small refactoring of pool monitor --- diff --git a/cds/sync/pool_monitor.h b/cds/sync/pool_monitor.h index f38edc90..1e73711a 100644 --- a/cds/sync/pool_monitor.h +++ b/cds/sync/pool_monitor.h @@ -175,6 +175,7 @@ namespace cds { namespace sync { // If the node has no lock, allocate it from pool pLock = p.m_SyncMonitorInjection.m_pLock; if ( !pLock ) { + assert( cur == 0 ); pLock = p.m_SyncMonitorInjection.m_pLock = m_Pool.allocate( 1 ); m_Stat.onLockAllocation(); } @@ -199,7 +200,7 @@ namespace cds { namespace sync { // try lock spin 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_nSpinBit, + if ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur | c_nSpinBit, atomics::memory_order_acquire, atomics::memory_order_relaxed ) ) { back_off bkoff; @@ -207,7 +208,7 @@ namespace cds { namespace sync { m_Stat.onUnlockContention(); bkoff(); cur &= ~c_nSpinBit; - } while ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur + c_nSpinBit, + } while ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur | c_nSpinBit, atomics::memory_order_acquire, atomics::memory_order_relaxed )); }