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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to