projects
/
libcds.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4701cf9
)
Fixed memory leak
author
khizmax
<khizmax@gmail.com>
Fri, 13 Mar 2015 08:24:39 +0000
(11:24 +0300)
committer
khizmax
<khizmax@gmail.com>
Fri, 13 Mar 2015 08:24:39 +0000
(11:24 +0300)
cds/container/impl/bronson_avltree_map_rcu.h
patch
|
blob
|
history
diff --git
a/cds/container/impl/bronson_avltree_map_rcu.h
b/cds/container/impl/bronson_avltree_map_rcu.h
index d44c64ea412b1c6c0decb5b978a538f9ab96c853..94fe48ade5847ed76f4414229b0f6e6c8ffaf577 100644
(file)
--- a/
cds/container/impl/bronson_avltree_map_rcu.h
+++ b/
cds/container/impl/bronson_avltree_map_rcu.h
@@
-142,6
+142,7
@@
namespace cds { namespace container {
static void free_node( node_type * pNode )
{
// Free node without disposer
static void free_node( node_type * pNode )
{
// Free node without disposer
+ assert( !pNode->is_valued( memory_model::memory_order_relaxed ));
cxx_allocator().Delete( pNode );
}
cxx_allocator().Delete( pNode );
}
@@
-1229,6
+1230,9
@@
namespace cds { namespace container {
|| child( pNode, nDir, memory_model::memory_order_relaxed ) != nullptr )
{
if ( c_bRelaxedInsert ) {
|| 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();
}
free_node( pNew );
m_stat.onRelaxedInsertFailed();
}