// CDS_VERIFY: Debug - assert(_expr); Release - _expr
#ifdef CDS_DEBUG
# define CDS_VERIFY( _expr ) assert( _expr )
-# define CDS_DEBUG_DO( _expr ) _expr
+# define CDS_DEBUG_ONLY( _expr ) _expr
#else
# define CDS_VERIFY( _expr ) _expr
-# define CDS_DEBUG_DO( _expr )
+# define CDS_DEBUG_ONLY( _expr )
#endif
#ifdef CDS_STRICT
: m_bTrace( false )
, m_bDeleted( false )
{
- CDS_DEBUG_DO( GarbageCollector::instance().dbgNodeConstructed() ; )
+ CDS_DEBUG_ONLY( GarbageCollector::instance().dbgNodeConstructed() ; )
}
inline ContainerNode::~ContainerNode()
{
assert( m_RC == 0 );
- CDS_DEBUG_DO( GarbageCollector::instance().dbgNodeDestructed() ; )
+ CDS_DEBUG_ONLY( GarbageCollector::instance().dbgNodeDestructed() ; )
}
inline void GarbageCollector::try_retire( ThreadGC * pThreadGC )
{
- CDS_DEBUG_DO( unsigned int nAttempt = 0 );
+ CDS_DEBUG_ONLY( unsigned int nAttempt = 0 );
do {
pThreadGC->cleanUpLocal();
size_t n = m_nFreeList;
assert( m_arr[n].m_pNode.load( atomics::memory_order_relaxed ) == nullptr );
m_nFreeList = m_arr[n].m_nNextFree;
- CDS_DEBUG_DO( m_arr[n].m_nNextFree = m_nEndFreeList ; )
+ CDS_DEBUG_ONLY( m_arr[n].m_nNextFree = m_nEndFreeList ; )
m_arr[n].set( p, pFunc );
}
{
clear();
node_type * pHead = m_pHead.load(memory_model::memory_order_relaxed);
- CDS_DEBUG_DO( node_type * pTail = m_pTail.load(memory_model::memory_order_relaxed); )
- CDS_DEBUG_DO( assert( pHead == pTail ); )
+ CDS_DEBUG_ONLY( node_type * pTail = m_pTail.load(memory_model::memory_order_relaxed); )
+ CDS_DEBUG_ONLY( assert( pHead == pTail ); )
assert( pHead != nullptr );
m_pHead.store( nullptr, memory_model::memory_order_relaxed );
++m_ItemCounter;
while ( true ) {
- CDS_DEBUG_DO( size_t nLoopCount = 0);
+ CDS_DEBUG_ONLY( size_t nLoopCount = 0);
do {
typename permutation_generator::integer_type i = gen;
- CDS_DEBUG_DO( ++nLoopCount );
+ CDS_DEBUG_ONLY( ++nLoopCount );
if ( pTailSegment->cells[i].load(memory_model::memory_order_relaxed).all() ) {
// Cell is not empty, go next
m_Stat.onPushPopulated();
bool bHadNullValue = false;
cell item;
- CDS_DEBUG_DO( size_t nLoopCount = 0 );
+ CDS_DEBUG_ONLY( size_t nLoopCount = 0 );
do {
typename permutation_generator::integer_type i = gen;
- CDS_DEBUG_DO( ++nLoopCount );
+ CDS_DEBUG_ONLY( ++nLoopCount );
// Guard the item
// In segmented queue the cell cannot be reused
bool bCurrent = false;
m_spin.compare_exchange_strong( bCurrent, true, atomics::memory_order_acquire, atomics::memory_order_relaxed );
- CDS_DEBUG_DO(
+ CDS_DEBUG_ONLY(
if ( !bCurrent ) {
m_dbgOwnerId = OS::getCurrentThreadId();
}
assert( m_spin.load( atomics::memory_order_relaxed ) );
assert( m_dbgOwnerId == OS::getCurrentThreadId() );
- CDS_DEBUG_DO( m_dbgOwnerId = OS::c_NullThreadId; )
+ CDS_DEBUG_ONLY( m_dbgOwnerId = OS::c_NullThreadId; )
m_spin.store( false, atomics::memory_order_release );
}
void destroy()
{
allocator_type al;
- CDS_DEBUG_DO( cds::OS::ThreadId const nullThreadId = cds::OS::c_NullThreadId; )
- CDS_DEBUG_DO( cds::OS::ThreadId const mainThreadId = cds::OS::getCurrentThreadId() ;)
+ CDS_DEBUG_ONLY( cds::OS::ThreadId const nullThreadId = cds::OS::c_NullThreadId; )
+ CDS_DEBUG_ONLY( cds::OS::ThreadId const mainThreadId = cds::OS::getCurrentThreadId() ;)
thread_record * p = m_pHead.exchange( nullptr, atomics::memory_order_seq_cst );
while ( p ) {
GarbageCollector::~GarbageCollector()
{
- CDS_DEBUG_DO( const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; )
- CDS_DEBUG_DO( const cds::OS::ThreadId mainThreadId = cds::OS::getCurrentThreadId() ;)
+ CDS_DEBUG_ONLY( const cds::OS::ThreadId nullThreadId = cds::OS::c_NullThreadId; )
+ CDS_DEBUG_ONLY( const cds::OS::ThreadId mainThreadId = cds::OS::getCurrentThreadId() ;)
hplist_node * pHead = m_pListHead.load( atomics::memory_order_relaxed );
m_pListHead.store( nullptr, atomics::memory_order_relaxed );