From d40ea18d5fc419cc24d2896bc0eec0042ec7d438 Mon Sep 17 00:00:00 2001 From: khizmax Date: Sun, 28 May 2017 21:00:34 +0300 Subject: [PATCH] Fixed memory ordering --- cds/container/details/bronson_avltree_base.h | 5 +++++ cds/container/impl/bronson_avltree_map_rcu.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cds/container/details/bronson_avltree_base.h b/cds/container/details/bronson_avltree_base.h index 52301645..865c5047 100644 --- a/cds/container/details/bronson_avltree_base.h +++ b/cds/container/details/bronson_avltree_base.h @@ -125,6 +125,11 @@ namespace cds { namespace container { m_nVersion.store( ver, order ); } + void exchange_version( version_type ver, atomics::memory_order order ) + { + m_nVersion.exchange( ver, order ); + } + int height( atomics::memory_order order ) const { return m_nHeight.load( order ); diff --git a/cds/container/impl/bronson_avltree_map_rcu.h b/cds/container/impl/bronson_avltree_map_rcu.h index 55cba8ee..a02c4c2b 100644 --- a/cds/container/impl/bronson_avltree_map_rcu.h +++ b/cds/container/impl/bronson_avltree_map_rcu.h @@ -1856,7 +1856,7 @@ namespace cds { namespace container { { assert(pNode->version(memory_model::memory_order_acquire) == version ); assert( (version & node_type::shrinking) == 0 ); - pNode->version( version | node_type::shrinking, memory_model::memory_order_release ); + pNode->exchange_version( version | node_type::shrinking, memory_model::memory_order_acquire ); } static void end_change( node_type * pNode, version_type version ) { -- 2.34.1