From: khizmax Date: Sat, 4 Apr 2015 13:46:47 +0000 (+0300) Subject: BronsonAVLTreeMap: fixed update() bug X-Git-Tag: v2.1.0~280 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=080f80579152f664abb8ec02b5b06efaf485586d;p=libcds.git BronsonAVLTreeMap: fixed update() bug --- diff --git a/cds/container/impl/bronson_avltree_map_rcu.h b/cds/container/impl/bronson_avltree_map_rcu.h index bbc93ffa..8524ddfc 100644 --- a/cds/container/impl/bronson_avltree_map_rcu.h +++ b/cds/container/impl/bronson_avltree_map_rcu.h @@ -1312,6 +1312,7 @@ namespace cds { namespace container { int try_update_node( int nFlags, Func funcUpdate, node_type * pNode, version_type nVersion, rcu_disposer& disp ) { mapped_type pOld; + bool bInserted; assert( pNode != nullptr ); { node_scoped_lock l( m_Monitor, *pNode ); @@ -1330,6 +1331,7 @@ namespace cds { namespace container { } pOld = pNode->value( memory_model::memory_order_relaxed ); + bInserted = pOld == nullptr; mapped_type pVal = funcUpdate( pNode ); if ( pVal == pOld ) pOld = nullptr; @@ -1344,6 +1346,11 @@ namespace cds { namespace container { m_stat.onDisposeValue(); } + if ( bInserted ) { + m_stat.onInsertSuccess(); + return update_flags::result_inserted; + } + m_stat.onUpdateSuccess(); return update_flags::result_updated; }