From 6833bf02d789af2941fcb6d7bd98d234a75c4577 Mon Sep 17 00:00:00 2001 From: khizmax Date: Sat, 4 Apr 2015 13:03:00 +0300 Subject: [PATCH] BronsonAVLTreeMap: fixed memory ordering --- cds/container/impl/bronson_avltree_map_rcu.h | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/cds/container/impl/bronson_avltree_map_rcu.h b/cds/container/impl/bronson_avltree_map_rcu.h index 36449e81..d5252e66 100644 --- a/cds/container/impl/bronson_avltree_map_rcu.h +++ b/cds/container/impl/bronson_avltree_map_rcu.h @@ -1166,7 +1166,6 @@ namespace cds { namespace container { m_stat.onRemoveWaitShrinking(); pChild->template wait_until_shrink_completed( memory_model::memory_order_relaxed ); // retry - result = update_flags::retry; } else if ( pChild == child( pNode, nCmp )) { // this second read is important, because it is protected by nChildVersion @@ -1330,7 +1329,6 @@ namespace cds { namespace container { return update_flags::failed; } - pOld = pNode->value( memory_model::memory_order_relaxed ); mapped_type pVal = funcUpdate( pNode ); if ( pVal == pOld ) @@ -1356,7 +1354,7 @@ namespace cds { namespace container { assert( pParent != nullptr ); assert( pNode != nullptr ); - if ( !pNode->is_valued( atomics::memory_order_relaxed ) ) + if ( !pNode->is_valued( memory_model::memory_order_relaxed ) ) return update_flags::failed; if ( child( pNode, left_child ) == nullptr || child( pNode, right_child ) == nullptr ) { @@ -1364,7 +1362,7 @@ namespace cds { namespace container { mapped_type pOld; { node_scoped_lock lp( m_Monitor, *pParent ); - if ( pParent->is_unlinked( atomics::memory_order_relaxed ) || parent( pNode ) != pParent ) + if ( pParent->is_unlinked( memory_model::memory_order_relaxed ) || parent( pNode ) != pParent ) return update_flags::retry; { @@ -1397,9 +1395,9 @@ namespace cds { namespace container { mapped_type pOld; { node_scoped_lock ln( m_Monitor, *pNode ); - pOld = pNode->value( atomics::memory_order_relaxed ); - if ( pNode->version( atomics::memory_order_acquire ) == nVersion && pOld ) { - pNode->m_pValue.store( nullptr, atomics::memory_order_relaxed ); + pOld = pNode->value( memory_model::memory_order_relaxed ); + if ( pNode->version( memory_model::memory_order_acquire ) == nVersion && pOld ) { + pNode->m_pValue.store( nullptr, memory_model::memory_order_relaxed ); result = update_flags::result_removed; } } -- 2.34.1