projects
/
libcds.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c73ad47
)
[UBsan] fixed UB
author
khizmax
<libcds.dev@gmail.com>
Wed, 8 Mar 2017 08:37:21 +0000
(11:37 +0300)
committer
khizmax
<libcds.dev@gmail.com>
Wed, 8 Mar 2017 08:37:21 +0000
(11:37 +0300)
cds/intrusive/ellen_bintree_rcu.h
patch
|
blob
|
history
diff --git
a/cds/intrusive/ellen_bintree_rcu.h
b/cds/intrusive/ellen_bintree_rcu.h
index 50e9cf022fe144503ecb465ca8f39a0e9b728aaa..b948cc8ef2e1d3e62dc7f227bd7d6fa9214776e6 100644
(file)
--- a/
cds/intrusive/ellen_bintree_rcu.h
+++ b/
cds/intrusive/ellen_bintree_rcu.h
@@
-552,10
+552,14
@@
namespace cds { namespace intrusive {
protected:
//@cond
protected:
//@cond
- static void free_leaf_node( value_type
* p )
+ static void free_leaf_node( value_type* p )
{
disposer()( p );
}
{
disposer()( p );
}
+ static void free_leaf_node_void( void* p )
+ {
+ free_leaf_node( reinterpret_cast<value_type*>( p ));
+ }
internal_node * alloc_internal_node() const
{
internal_node * alloc_internal_node() const
{
@@
-565,10
+569,14
@@
namespace cds { namespace intrusive {
return pNode;
}
return pNode;
}
- static void free_internal_node( internal_node
* pNode )
+ static void free_internal_node( internal_node* pNode )
{
cxx_node_allocator().Delete( pNode );
}
{
cxx_node_allocator().Delete( pNode );
}
+ static void free_internal_node_void( void* pNode )
+ {
+ free_internal_node( reinterpret_cast<internal_node*>( pNode ));
+ }
struct internal_node_deleter {
void operator()( internal_node * p) const
struct internal_node_deleter {
void operator()( internal_node * p) const
@@
-585,10
+593,14
@@
namespace cds { namespace intrusive {
return cxx_update_desc_allocator().New();
}
return cxx_update_desc_allocator().New();
}
- static void free_update_desc( update_desc
* pDesc )
+ static void free_update_desc( update_desc* pDesc )
{
cxx_update_desc_allocator().Delete( pDesc );
}
{
cxx_update_desc_allocator().Delete( pDesc );
}
+ static void free_update_desc_void( void* pDesc )
+ {
+ free_update_desc( reinterpret_cast<update_desc*>( pDesc ) );
+ }
class retired_list
{
class retired_list
{
@@
-615,21
+627,19
@@
namespace cds { namespace intrusive {
cds::urcu::retired_ptr operator *()
{
if ( m_pUpdate ) {
cds::urcu::retired_ptr operator *()
{
if ( m_pUpdate ) {
- return cds::urcu::retired_ptr( reinterpret_cast<void *>( m_pUpdate ),
- reinterpret_cast<cds::urcu::free_retired_ptr_func>( free_update_desc ));
+ return cds::urcu::retired_ptr( reinterpret_cast<void *>( m_pUpdate ), free_update_desc_void );
}
if ( m_pNode ) {
if ( m_pNode->is_leaf()) {
return cds::urcu::retired_ptr( reinterpret_cast<void *>( node_traits::to_value_ptr( static_cast<leaf_node *>( m_pNode ))),
}
if ( m_pNode ) {
if ( m_pNode->is_leaf()) {
return cds::urcu::retired_ptr( reinterpret_cast<void *>( node_traits::to_value_ptr( static_cast<leaf_node *>( m_pNode ))),
-
reinterpret_cast< cds::urcu::free_retired_ptr_func>( free_leaf_node )
);
+
free_leaf_node_void
);
}
else {
return cds::urcu::retired_ptr( reinterpret_cast<void *>( static_cast<internal_node *>( m_pNode )),
}
else {
return cds::urcu::retired_ptr( reinterpret_cast<void *>( static_cast<internal_node *>( m_pNode )),
-
reinterpret_cast<cds::urcu::free_retired_ptr_func>( free_internal_node )
);
+
free_internal_node_void
);
}
}
}
}
- return cds::urcu::retired_ptr( nullptr,
- reinterpret_cast<cds::urcu::free_retired_ptr_func>( free_update_desc ));
+ return cds::urcu::retired_ptr( nullptr, free_update_desc_void );
}
void operator ++()
}
void operator ++()