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]