TSan exam: SplitList
authorkhizmax <libcds.dev@gmail.com>
Sun, 17 May 2015 14:31:08 +0000 (17:31 +0300)
committerkhizmax <libcds.dev@gmail.com>
Sun, 17 May 2015 14:31:08 +0000 (17:31 +0300)
cds/intrusive/split_list_rcu.h

index 99c1c23b5c87298dcd8c3a85b9d35faebb8cd60a..7c8618f7e0c3b86f5fb59d68c7913d313c3e31c7 100644 (file)
@@ -561,7 +561,10 @@ namespace cds { namespace intrusive {
             dummy_node_type * pHead = get_bucket( nHash );
             assert( pHead != nullptr );
 
+            // TSan false positive: hash is read-only, will be ordered when we insert a node
+            CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN;
             node_traits::to_node_ptr( val )->m_nHash = split_list::regular_hash( nHash );
+            CDS_TSAN_ANNOTATE_IGNORE_WRITES_END;
 
             if ( m_List.insert_at( pHead, val, f )) {
                 inc_item_count();
@@ -606,7 +609,10 @@ namespace cds { namespace intrusive {
             dummy_node_type * pHead = get_bucket( nHash );
             assert( pHead != nullptr );
 
+            // TSan false positive: hash is read-only, will be ordered when we insert a node
+            CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN;
             node_traits::to_node_ptr( val )->m_nHash = split_list::regular_hash( nHash );
+            CDS_TSAN_ANNOTATE_IGNORE_WRITES_END;
 
             std::pair<bool, bool> bRet = m_List.ensure_at( pHead, val, func );
             if ( bRet.first && bRet.second ) {