Fixed memory ordering
authorkhizmax <libcds.dev@gmail.com>
Sun, 28 May 2017 18:00:34 +0000 (21:00 +0300)
committerkhizmax <libcds.dev@gmail.com>
Sun, 28 May 2017 18:00:34 +0000 (21:00 +0300)
cds/container/details/bronson_avltree_base.h
cds/container/impl/bronson_avltree_map_rcu.h

index 5230164570ada0d0a10b1e1762e5eb73a6f29aac..865c5047fc0d32b930035931ff26525035313211 100644 (file)
@@ -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 );
index 55cba8ee93acec1c8fc6645daf0a522233fc85ac..a02c4c2bb2177eec57f74eb2413a097141a9c791 100644 (file)
@@ -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 )
         {