You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brpc.apache.org by GitBox <gi...@apache.org> on 2022/02/23 10:16:36 UTC

[GitHub] [incubator-brpc] lday0321 commented on issue #1687: 静态链接libbrpc.a Clang TSAN校验报错

lday0321 commented on issue #1687:
URL: https://github.com/apache/incubator-brpc/issues/1687#issuecomment-1048629264


   @wwbmmm 绕开brpc TSAN warning的时候, 把mutex.cpp的pthread_mutex_lock/pthread_mutex_unlock移除是不是还不够? 我移掉之后,跑简单UT TSAN check(简单的braft case),报很多mutex相关的错误:
   Mutex M93303508761559560 is already destroyed.
   Mutex M92177797832769712 is already destroyed.
   
   ```
   WARNING: ThreadSanitizer: data race (pid=17071)
     Read of size 8 at 0x7b080006f080 by thread T69 (mutexes: write M93303508761559560):
       #0 memcmp <null> (braft_tsan_test+0x23169f)
       #1 std::char_traits<char>::compare(char const*, char const*, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/char_traits.h:325:9 (braft_tsan_test+0x4cdb2e)
       #2 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:2859 (braft_tsan_test+0x4cdb2e)
       #3 bool std::operator<<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:6229 (braft_tsan_test+0x4cdb2e)
       #4 std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_function.h:386 (braft_tsan_test+0x4cdb2e)
       #5 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > > >::_M_lower_bound(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > > const*, std::_Rb_tree_node_base const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cons
 t&) const /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:1945 (braft_tsan_test+0x4cdb2e)
       #6 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > > >::find(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:2570 (braft_tsan_test+0x4cdb2e)
       #7 void std::__invoke_impl<void, my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>(std::__invoke_other, my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0&&, braft::Node*&&, braft::NodeOptions*&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/invoke.h:60:14 (braft_tsan_test+0x27be5d)
       #8 std::__invoke_result<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>::type std::__invoke<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>(my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0&&, braft::Node*&&, braft::NodeOptions*&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/invoke.h:95:14 (braft_tsan_test+0x27bc6a)
       #9 void std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:244:13 (braft_tsan_test+0x27bbce)
       #10 std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> >::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:251:11 (braft_tsan_test+0x27bb38)
       #11 std::thread::_State_impl<std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> > >::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:195:13 (braft_tsan_test+0x27b8ac)
       #12 <null> <null> (libstdc++.so.6+0xd2bd3)
   
     Previous write of size 8 at 0x7b080006f080 by thread T68 (mutexes: write M92177797832769712):
       #0 operator new(unsigned long) <null> (braft_tsan_test+0x2777e7)
       #1 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.tcc:219:14 (braft_tsan_test+0x4cd74f)
       #2 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct_aux<char*>(char*, char*, std::__false_type) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:247 (braft_tsan_test+0x4cd74f)
       #3 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:266 (braft_tsan_test+0x4cd74f)
       #4 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:451 (braft_tsan_test+0x4cd74f)
       #5 std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> >::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, scoped_refptr<braft::KVBasedMergedMetaStorageImpl>, true>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_pair.h:261 (braft_tsan_test+0x4cd74f)
       #6 std::pair<std::__decay_and_strip<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::__type, std::__decay_and_strip<scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&>::__type> std::make_pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_pair.h:529 (braft_tsan_test+0x4cd74f)
       #7 braft::MetaStorageManager::_add(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, scoped_refptr<braft::KVBasedMergedMetaStorageImpl>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > > >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&) /v/braft/braft/src/braft/raft_meta.cpp:111 (braft_tsan_test+0x4cd74f)
       #8 void std::__invoke_impl<void, my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>(std::__invoke_other, my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0&&, braft::Node*&&, braft::NodeOptions*&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/invoke.h:60:14 (braft_tsan_test+0x27be5d)
       #9 std::__invoke_result<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>::type std::__invoke<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>(my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0&&, braft::Node*&&, braft::NodeOptions*&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/invoke.h:95:14 (braft_tsan_test+0x27bc6a)
       #10 void std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:244:13 (braft_tsan_test+0x27bbce)
       #11 std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> >::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:251:11 (braft_tsan_test+0x27bb38)
       #12 std::thread::_State_impl<std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> > >::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:195:13 (braft_tsan_test+0x27b8ac)
       #13 <null> <null> (libstdc++.so.6+0xd2bd3)
   
     Location is heap block of size 29 at 0x7b080006f080 allocated by thread T68:
       #0 operator new(unsigned long) <null> (braft_tsan_test+0x2777e7)
       #1 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.tcc:219:14 (braft_tsan_test+0x4cd74f)
       #2 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct_aux<char*>(char*, char*, std::__false_type) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:247 (braft_tsan_test+0x4cd74f)
       #3 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:266 (braft_tsan_test+0x4cd74f)
       #4 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/basic_string.h:451 (braft_tsan_test+0x4cd74f)
       #5 std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> >::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, scoped_refptr<braft::KVBasedMergedMetaStorageImpl>, true>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_pair.h:261 (braft_tsan_test+0x4cd74f)
       #6 std::pair<std::__decay_and_strip<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::__type, std::__decay_and_strip<scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&>::__type> std::make_pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_pair.h:529 (braft_tsan_test+0x4cd74f)
       #7 braft::MetaStorageManager::_add(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, scoped_refptr<braft::KVBasedMergedMetaStorageImpl>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> > > >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, scoped_refptr<braft::KVBasedMergedMetaStorageImpl> const&) /v/braft/braft/src/braft/raft_meta.cpp:111 (braft_tsan_test+0x4cd74f)
       #8 void std::__invoke_impl<void, my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>(std::__invoke_other, my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0&&, braft::Node*&&, braft::NodeOptions*&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/invoke.h:60:14 (braft_tsan_test+0x27be5d)
       #9 std::__invoke_result<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>::type std::__invoke<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*>(my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0&&, braft::Node*&&, braft::NodeOptions*&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/invoke.h:95:14 (braft_tsan_test+0x27bc6a)
       #10 void std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:244:13 (braft_tsan_test+0x27bbce)
       #11 std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> >::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:251:11 (braft_tsan_test+0x27bb38)
       #12 std::thread::_State_impl<std::thread::_Invoker<std::tuple<my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody()::$_0, braft::Node*, braft::NodeOptions*> > >::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/thread:195:13 (braft_tsan_test+0x27b8ac)
       #13 <null> <null> (libstdc++.so.6+0xd2bd3)
   
     Mutex M93303508761559560 is already destroyed.
   
     Mutex M92177797832769712 is already destroyed.
   
     Thread T69 (tid=17142, running) created by main thread at:
       #0 pthread_create <null> (braft_tsan_test+0x207866)
       #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xd2e98)
       #2 my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody() /v/tsan_demo/braft_tsan_test.cc:113:15 (braft_tsan_test+0x27a216)
       #3 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (braft_tsan_test+0x2b5abc)
       #4 main /v/tsan_demo/braft_tsan_test.cc:157:10 (braft_tsan_test+0x278a88)
   
     Thread T68 (tid=17141, running) created by main thread at:
       #0 pthread_create <null> (braft_tsan_test+0x207866)
       #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xd2e98)
       #2 my::(anonymous namespace)::MyTest_TSAN_Check_braft_Test::TestBody() /v/tsan_demo/braft_tsan_test.cc:111:15 (braft_tsan_test+0x27a19c)
       #3 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (braft_tsan_test+0x2b5abc)
       #4 main /v/tsan_demo/braft_tsan_test.cc:157:10 (braft_tsan_test+0x278a88)
   
   SUMMARY: ThreadSanitizer: data race (/v/tsan_demo/build_tsan/braft_tsan_test+0x23169f) in memcmp
   ```
   
   以及:
   ```
   WARNING: ThreadSanitizer: data race (pid=17071)
     Read of size 8 at 0x7b0c00063108 by thread T38:
       #0 std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_S_right(std::_Rb_tree_node_base*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:798:45 (braft_tsan_test+0x27f006)
       #1 std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_erase(std::_Rb_tree_node<braft::PeerId>*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:1913:13 (braft_tsan_test+0x2815d7)
       #2 std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::~_Rb_tree() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:995:9 (braft_tsan_test+0x506d86)
       #3 std::set<braft::PeerId, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::~set() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_set.h:281 (braft_tsan_test+0x506d86)
       #4 braft::NodeImpl::elect_self(std::unique_lock<butil::Mutex>*, bool) /v/braft/braft/src/braft/node.cpp:1707 (braft_tsan_test+0x506d86)
   
     Previous write of size 8 at 0x7b0c00063108 by thread T54 (mutexes: write M3894):
       #0 operator new(unsigned long) <null> (braft_tsan_test+0x2777e7)
       #1 __gnu_cxx::new_allocator<std::_Rb_tree_node<braft::PeerId> >::allocate(unsigned long, void const*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/ext/new_allocator.h:114:27 (braft_tsan_test+0x51b679)
       #2 std::allocator_traits<std::allocator<std::_Rb_tree_node<braft::PeerId> > >::allocate(std::allocator<std::_Rb_tree_node<braft::PeerId> >&, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/alloc_traits.h:444 (braft_tsan_test+0x51b679)
       #3 std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_get_node() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:580 (braft_tsan_test+0x51b679)
       #4 std::_Rb_tree_node<braft::PeerId>* std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_create_node<braft::PeerId const&>(braft::PeerId const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:630 (braft_tsan_test+0x51b679)
       #5 std::_Rb_tree_node<braft::PeerId>* std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node::operator()<braft::PeerId const&>(braft::PeerId const&) const /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:548 (braft_tsan_test+0x51b679)
       #6 std::_Rb_tree_iterator<braft::PeerId> std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_insert_<braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node>(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:1810 (braft_tsan_test+0x51b679)
       #7 std::_Rb_tree_iterator<braft::PeerId> std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_insert_unique_<braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node>(std::_Rb_tree_const_iterator<braft::PeerId>, braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:2261 (braft_tsan_test+0x51b679)
       #8 std::enable_if<__same_value_type<std::_Rb_tree_const_iterator<braft::PeerId> >::value, void>::type std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_insert_range_unique<std::_Rb_tree_const_iterator<braft::PeerId> >(std::_Rb_tree_const_iterator<braft::PeerId>, std::_Rb_tree_const_iterator<braft::PeerId>) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:1113 (braft_tsan_test+0x51b679)
   
     Location is heap block of size 48 at 0x7b0c000630f0 allocated by thread T54:
       #0 operator new(unsigned long) <null> (braft_tsan_test+0x2777e7)
       #1 __gnu_cxx::new_allocator<std::_Rb_tree_node<braft::PeerId> >::allocate(unsigned long, void const*) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/ext/new_allocator.h:114:27 (braft_tsan_test+0x51b679)
       #2 std::allocator_traits<std::allocator<std::_Rb_tree_node<braft::PeerId> > >::allocate(std::allocator<std::_Rb_tree_node<braft::PeerId> >&, unsigned long) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/alloc_traits.h:444 (braft_tsan_test+0x51b679)
       #3 std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_get_node() /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:580 (braft_tsan_test+0x51b679)
       #4 std::_Rb_tree_node<braft::PeerId>* std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_create_node<braft::PeerId const&>(braft::PeerId const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:630 (braft_tsan_test+0x51b679)
       #5 std::_Rb_tree_node<braft::PeerId>* std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node::operator()<braft::PeerId const&>(braft::PeerId const&) const /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:548 (braft_tsan_test+0x51b679)
       #6 std::_Rb_tree_iterator<braft::PeerId> std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_insert_<braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node>(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:1810 (braft_tsan_test+0x51b679)
       #7 std::_Rb_tree_iterator<braft::PeerId> std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_insert_unique_<braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node>(std::_Rb_tree_const_iterator<braft::PeerId>, braft::PeerId const&, std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_Alloc_node&) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:2261 (braft_tsan_test+0x51b679)
       #8 std::enable_if<__same_value_type<std::_Rb_tree_const_iterator<braft::PeerId> >::value, void>::type std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_M_insert_range_unique<std::_Rb_tree_const_iterator<braft::PeerId> >(std::_Rb_tree_const_iterator<braft::PeerId>, std::_Rb_tree_const_iterator<braft::PeerId>) /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:1113 (braft_tsan_test+0x51b679)
   
     Mutex M3894 (0x7b7000002b58) created at:
       #0 pthread_mutex_init <null> (braft_tsan_test+0x207c8a)
       #1 butil::Mutex::Mutex() /install_libs/brpc/include/butil/synchronization/lock.h:51:9 (braft_tsan_test+0x5014e0)
       #2 braft::NodeImpl::NodeImpl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, braft::PeerId const&) /v/braft/braft/src/braft/node.cpp:136 (braft_tsan_test+0x5014e0)
       #3 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (braft_tsan_test+0x2b5abc)
       #4 main /v/tsan_demo/braft_tsan_test.cc:157:10 (braft_tsan_test+0x278a88)
   
     Thread T38 (tid=17110, running) created by main thread at:
       #0 pthread_create <null> (braft_tsan_test+0x207866)
       #1 bthread::TaskControl::add_workers(int) /v/brpc/incubator-brpc/src/bthread/task_control.cpp:199:24 (braft_tsan_test+0x31f90d)
       #2 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (braft_tsan_test+0x2b5abc)
       #3 main /v/tsan_demo/braft_tsan_test.cc:157:10 (braft_tsan_test+0x278a88)
   
     Thread T54 (tid=17126, running) created by main thread at:
       #0 pthread_create <null> (braft_tsan_test+0x207866)
       #1 bthread::TaskControl::add_workers(int) /v/brpc/incubator-brpc/src/bthread/task_control.cpp:199:24 (braft_tsan_test+0x31f90d)
       #2 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (braft_tsan_test+0x2b5abc)
       #3 main /v/tsan_demo/braft_tsan_test.cc:157:10 (braft_tsan_test+0x278a88)
   
   SUMMARY: ThreadSanitizer: data race /usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_tree.h:798:45 in std::_Rb_tree<braft::PeerId, braft::PeerId, std::_Identity<braft::PeerId>, std::less<braft::PeerId>, std::allocator<braft::PeerId> >::_S_right(std::_Rb_tree_node_base*)
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@brpc.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@brpc.apache.org
For additional commands, e-mail: dev-help@brpc.apache.org