Fixed memory leak
authorkhizmax <khizmax@gmail.com>
Fri, 13 Mar 2015 08:24:39 +0000 (11:24 +0300)
committerkhizmax <khizmax@gmail.com>
Fri, 13 Mar 2015 08:24:39 +0000 (11:24 +0300)
cds/container/impl/bronson_avltree_map_rcu.h

index d44c64ea412b1c6c0decb5b978a538f9ab96c853..94fe48ade5847ed76f4414229b0f6e6c8ffaf577 100644 (file)
@@ -142,6 +142,7 @@ namespace cds { namespace container {
         static void free_node( node_type * pNode )
         {
             // Free node without disposer
+            assert( !pNode->is_valued( memory_model::memory_order_relaxed ));
             cxx_allocator().Delete( pNode );
         }
 
@@ -1229,6 +1230,9 @@ namespace cds { namespace container {
                      || child( pNode, nDir, memory_model::memory_order_relaxed ) != nullptr ) 
                 {
                     if ( c_bRelaxedInsert ) {
+                        mapped_type pVal = pNew->m_pValue.load( memory_model::memory_order_relaxed );
+                        pNew->m_pValue.store( nullptr, memory_model::memory_order_relaxed );
+                        free_value( pVal );
                         free_node( pNew );
                         m_stat.onRelaxedInsertFailed();
                     }