From 0f9de05c6d8aa9c5c807b9502ada7f776d40c526 Mon Sep 17 00:00:00 2001 From: khizmax Date: Fri, 13 Mar 2015 12:47:31 +0300 Subject: [PATCH] small refactoring of pool monitor --- cds/sync/pool_monitor.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 )); } -- 2.34.1