./src/test/test_bitcoin fails with TSan on x86_64 #18823

issue hebasto opened this issue on April 30, 2020
  1. hebasto commented at 3:46 AM on April 30, 2020: member

    Building master (36c0abd8f61ba859d53b1e59014720282c97c143) on Linux Mint 19.3 (x86_64):

    $ ./configure --with-sanitizers=thread --disable-asm CC=clang-8 CXX=clang++-8
    $ make clean && make
    $ ./src/test/test_bitcoin
    ...
    *** 1 failure is detected in the test module "Bitcoin Core Test Suite"
    ThreadSanitizer: reported 3011 warnings
    

    Related to #17540.

  2. hebasto added the label Bug on Apr 30, 2020
  3. MarcoFalke commented at 12:03 PM on April 30, 2020: member

    What are the warnings and failures? Without them there is nothing we can fix or troubleshoot.

  4. practicalswift commented at 2:48 PM on April 30, 2020: contributor

    @hebasto Thanks for reporting. We test with --with-sanitizers=thread in the Travis ci/test/00_setup_env_native_tsan.sh job, so if this turns out to be a general issue then it would be interesting to know why the ThreadSanitizer Travis job didn't fail :)

  5. hebasto commented at 6:41 PM on April 30, 2020: member

    What are the warnings and failures? Without them there is nothing we can fix or troubleshoot.

    Sorry. Initially, the GH failed to upload the whole log.

    Here is a typical excerpt from the log:

    ==================
    WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=11525)
      Cycle in lock order graph: M506513391043629040 (0x000000000000) => M1053137795832139960 (0x000000000000) => M1044975021507526992 (0x000000000000) => M1022457023370664312 (0x000000000000) => M1028930947835011848 (0x000000000000) => M506513391043629040
    
      Mutex M1053137795832139960 acquired here while holding mutex M506513391043629040 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_rwlock_wrlock <null> (test_bitcoin+0xc5d0e)
        [#1](/bitcoin-bitcoin/1/) __db_pthread_mutex_lock <null> (libdb_cxx-4.8.so+0x3d2a5)
        [#2](/bitcoin-bitcoin/2/) bool WalletBatch::WriteIC<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey>, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey> const&, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> const&, bool) /home/hebasto/GitHub/bitcoin/src/./wallet/walletdb.h:187:22 (test_bitcoin+0xe4c78e)
        [#3](/bitcoin-bitcoin/3/) WalletBatch::WriteKey(CPubKey const&, std::vector<unsigned char, secure_allocator<unsigned char> > const&, CKeyMetadata const&) /home/hebasto/GitHub/bitcoin/src/wallet/walletdb.cpp:107 (test_bitcoin+0xe4c78e)
        [#4](/bitcoin-bitcoin/4/) LegacyScriptPubKeyMan::AddKeyPubKeyWithDB(WalletBatch&, CKey const&, CPubKey const&) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:657:22 (test_bitcoin+0xdd669d)
        [#5](/bitcoin-bitcoin/5/) LegacyScriptPubKeyMan::GenerateNewKey(WalletBatch&, bool) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:955:10 (test_bitcoin+0xdd9554)
        [#6](/bitcoin-bitcoin/6/) LegacyScriptPubKeyMan::TopUp(unsigned int) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:1170:28 (test_bitcoin+0xddcb11)
        [#7](/bitcoin-bitcoin/7/) CWallet::GetNewDestination(OutputType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessUnknown>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /home/hebasto/GitHub/bitcoin/src/wallet/wallet.cpp:3236:18 (test_bitcoin+0xe24b70)
        [#8](/bitcoin-bitcoin/8/) coinselector_tests::add_coin(CWallet&, long const&, int, bool, int, bool) /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:69:9 (test_bitcoin+0x824687)
        [#9](/bitcoin-bitcoin/9/) coinselector_tests::bnb_search_test::test_method() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:296:9 (test_bitcoin+0x820de5)
        [#10](/bitcoin-bitcoin/10/) coinselector_tests::bnb_search_test_invoker() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:135:1 (test_bitcoin+0x81a9bb)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x1a51f9)
        [#12](/bitcoin-bitcoin/12/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#13](/bitcoin-bitcoin/13/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
        Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message
    
      Mutex M1044975021507526992 acquired here while holding mutex M1053137795832139960 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_rwlock_wrlock <null> (test_bitcoin+0xc5d0e)
        [#1](/bitcoin-bitcoin/1/) __db_pthread_mutex_lock <null> (libdb_cxx-4.8.so+0x3d2a5)
        [#2](/bitcoin-bitcoin/2/) bool WalletBatch::WriteIC<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey>, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey> const&, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> const&, bool) /home/hebasto/GitHub/bitcoin/src/./wallet/walletdb.h:187:22 (test_bitcoin+0xe4c78e)
        [#3](/bitcoin-bitcoin/3/) WalletBatch::WriteKey(CPubKey const&, std::vector<unsigned char, secure_allocator<unsigned char> > const&, CKeyMetadata const&) /home/hebasto/GitHub/bitcoin/src/wallet/walletdb.cpp:107 (test_bitcoin+0xe4c78e)
        [#4](/bitcoin-bitcoin/4/) LegacyScriptPubKeyMan::AddKeyPubKeyWithDB(WalletBatch&, CKey const&, CPubKey const&) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:657:22 (test_bitcoin+0xdd669d)
        [#5](/bitcoin-bitcoin/5/) LegacyScriptPubKeyMan::GenerateNewKey(WalletBatch&, bool) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:955:10 (test_bitcoin+0xdd9554)
        [#6](/bitcoin-bitcoin/6/) LegacyScriptPubKeyMan::TopUp(unsigned int) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:1170:28 (test_bitcoin+0xddcb11)
        [#7](/bitcoin-bitcoin/7/) CWallet::GetNewDestination(OutputType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessUnknown>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /home/hebasto/GitHub/bitcoin/src/wallet/wallet.cpp:3236:18 (test_bitcoin+0xe24b70)
        [#8](/bitcoin-bitcoin/8/) coinselector_tests::add_coin(CWallet&, long const&, int, bool, int, bool) /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:69:9 (test_bitcoin+0x824687)
        [#9](/bitcoin-bitcoin/9/) coinselector_tests::bnb_search_test::test_method() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:296:9 (test_bitcoin+0x820de5)
        [#10](/bitcoin-bitcoin/10/) coinselector_tests::bnb_search_test_invoker() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:135:1 (test_bitcoin+0x81a9bb)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x1a51f9)
        [#12](/bitcoin-bitcoin/12/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#13](/bitcoin-bitcoin/13/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
      Mutex M1022457023370664312 acquired here while holding mutex M1044975021507526992 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_rwlock_wrlock <null> (test_bitcoin+0xc5d0e)
        [#1](/bitcoin-bitcoin/1/) __db_pthread_mutex_lock <null> (libdb_cxx-4.8.so+0x3d2a5)
        [#2](/bitcoin-bitcoin/2/) bool WalletBatch::WriteIC<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey>, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey> const&, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> const&, bool) /home/hebasto/GitHub/bitcoin/src/./wallet/walletdb.h:187:22 (test_bitcoin+0xe4c78e)
        [#3](/bitcoin-bitcoin/3/) WalletBatch::WriteKey(CPubKey const&, std::vector<unsigned char, secure_allocator<unsigned char> > const&, CKeyMetadata const&) /home/hebasto/GitHub/bitcoin/src/wallet/walletdb.cpp:107 (test_bitcoin+0xe4c78e)
        [#4](/bitcoin-bitcoin/4/) LegacyScriptPubKeyMan::AddKeyPubKeyWithDB(WalletBatch&, CKey const&, CPubKey const&) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:657:22 (test_bitcoin+0xdd669d)
        [#5](/bitcoin-bitcoin/5/) LegacyScriptPubKeyMan::GenerateNewKey(WalletBatch&, bool) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:955:10 (test_bitcoin+0xdd9554)
        [#6](/bitcoin-bitcoin/6/) LegacyScriptPubKeyMan::TopUp(unsigned int) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:1170:28 (test_bitcoin+0xddcb11)
        [#7](/bitcoin-bitcoin/7/) CWallet::GetNewDestination(OutputType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessUnknown>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /home/hebasto/GitHub/bitcoin/src/wallet/wallet.cpp:3236:18 (test_bitcoin+0xe24b70)
        [#8](/bitcoin-bitcoin/8/) coinselector_tests::add_coin(CWallet&, long const&, int, bool, int, bool) /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:69:9 (test_bitcoin+0x824687)
        [#9](/bitcoin-bitcoin/9/) coinselector_tests::bnb_search_test::test_method() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:296:9 (test_bitcoin+0x820de5)
        [#10](/bitcoin-bitcoin/10/) coinselector_tests::bnb_search_test_invoker() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:135:1 (test_bitcoin+0x81a9bb)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x1a51f9)
        [#12](/bitcoin-bitcoin/12/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#13](/bitcoin-bitcoin/13/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
      Mutex M1028930947835011848 acquired here while holding mutex M1022457023370664312 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_rwlock_wrlock <null> (test_bitcoin+0xc5d0e)
        [#1](/bitcoin-bitcoin/1/) __db_pthread_mutex_lock <null> (libdb_cxx-4.8.so+0x3d2a5)
        [#2](/bitcoin-bitcoin/2/) bool WalletBatch::WriteIC<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey>, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey> const&, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> const&, bool) /home/hebasto/GitHub/bitcoin/src/./wallet/walletdb.h:187:22 (test_bitcoin+0xe4c78e)
        [#3](/bitcoin-bitcoin/3/) WalletBatch::WriteKey(CPubKey const&, std::vector<unsigned char, secure_allocator<unsigned char> > const&, CKeyMetadata const&) /home/hebasto/GitHub/bitcoin/src/wallet/walletdb.cpp:107 (test_bitcoin+0xe4c78e)
        [#4](/bitcoin-bitcoin/4/) LegacyScriptPubKeyMan::AddKeyPubKeyWithDB(WalletBatch&, CKey const&, CPubKey const&) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:657:22 (test_bitcoin+0xdd669d)
        [#5](/bitcoin-bitcoin/5/) LegacyScriptPubKeyMan::GenerateNewKey(WalletBatch&, bool) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:955:10 (test_bitcoin+0xdd9554)
        [#6](/bitcoin-bitcoin/6/) LegacyScriptPubKeyMan::TopUp(unsigned int) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:1170:28 (test_bitcoin+0xddcb11)
        [#7](/bitcoin-bitcoin/7/) CWallet::GetNewDestination(OutputType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessUnknown>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /home/hebasto/GitHub/bitcoin/src/wallet/wallet.cpp:3236:18 (test_bitcoin+0xe24b70)
        [#8](/bitcoin-bitcoin/8/) coinselector_tests::add_coin(CWallet&, long const&, int, bool, int, bool) /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:69:9 (test_bitcoin+0x824687)
        [#9](/bitcoin-bitcoin/9/) coinselector_tests::bnb_search_test::test_method() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:296:9 (test_bitcoin+0x820de5)
        [#10](/bitcoin-bitcoin/10/) coinselector_tests::bnb_search_test_invoker() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:135:1 (test_bitcoin+0x81a9bb)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x1a51f9)
        [#12](/bitcoin-bitcoin/12/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#13](/bitcoin-bitcoin/13/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
      Mutex M506513391043629040 acquired here while holding mutex M1028930947835011848 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_rwlock_rdlock <null> (test_bitcoin+0xc591e)
        [#1](/bitcoin-bitcoin/1/) __db_pthread_mutex_readlock <null> (libdb_cxx-4.8.so+0x3d505)
        [#2](/bitcoin-bitcoin/2/) bool WalletBatch::WriteIC<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey>, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, CPubKey> const&, std::pair<std::vector<unsigned char, secure_allocator<unsigned char> >, uint256> const&, bool) /home/hebasto/GitHub/bitcoin/src/./wallet/walletdb.h:187:22 (test_bitcoin+0xe4c78e)
        [#3](/bitcoin-bitcoin/3/) WalletBatch::WriteKey(CPubKey const&, std::vector<unsigned char, secure_allocator<unsigned char> > const&, CKeyMetadata const&) /home/hebasto/GitHub/bitcoin/src/wallet/walletdb.cpp:107 (test_bitcoin+0xe4c78e)
        [#4](/bitcoin-bitcoin/4/) LegacyScriptPubKeyMan::AddKeyPubKeyWithDB(WalletBatch&, CKey const&, CPubKey const&) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:657:22 (test_bitcoin+0xdd669d)
        [#5](/bitcoin-bitcoin/5/) LegacyScriptPubKeyMan::GenerateNewKey(WalletBatch&, bool) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:955:10 (test_bitcoin+0xdd9554)
        [#6](/bitcoin-bitcoin/6/) LegacyScriptPubKeyMan::TopUp(unsigned int) /home/hebasto/GitHub/bitcoin/src/wallet/scriptpubkeyman.cpp:1170:28 (test_bitcoin+0xddcb11)
        [#7](/bitcoin-bitcoin/7/) CWallet::GetNewDestination(OutputType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::variant<CNoDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessUnknown>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /home/hebasto/GitHub/bitcoin/src/wallet/wallet.cpp:3236:18 (test_bitcoin+0xe24b70)
        [#8](/bitcoin-bitcoin/8/) coinselector_tests::add_coin(CWallet&, long const&, int, bool, int, bool) /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:69:9 (test_bitcoin+0x824687)
        [#9](/bitcoin-bitcoin/9/) coinselector_tests::bnb_search_test::test_method() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:296:9 (test_bitcoin+0x820de5)
        [#10](/bitcoin-bitcoin/10/) coinselector_tests::bnb_search_test_invoker() /home/hebasto/GitHub/bitcoin/src/wallet/test/coinselector_tests.cpp:135:1 (test_bitcoin+0x81a9bb)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x1a51f9)
        [#12](/bitcoin-bitcoin/12/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#13](/bitcoin-bitcoin/13/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
    SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/home/hebasto/GitHub/bitcoin/src/test/test_bitcoin+0xc5d0e) in __interceptor_pthread_rwlock_wrlock
    ==================
    
  6. hebasto commented at 7:01 PM on April 30, 2020: member

    @hebasto Thanks for reporting. We test with --with-sanitizers=thread in the Travis ci/test/00_setup_env_native_tsan.sh job, so if this turns out to be a general issue then it would be interesting to know why the ThreadSanitizer Travis job didn't fail :)

    After adding --disable-wallet to the configure options all of the libdb-related warnings gone. Do we have documented it somewhere?

    The remaining warnings are only from the sync_tests:

    $ ./configure --disable-wallet --with-sanitizers=thread --disable-asm CC=clang-8 CXX=clang++-8
    $ make clean && make
    $ ./src/test/test_bitcoin --run_test=sync_tests
    Running 1 test case...
    ==================
    WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=22149)
      Cycle in lock order graph: M131473 (0x7ffedb5970e8) => M131474 (0x7ffedb5970c0) => M131473
    
      Mutex M131474 acquired here while holding mutex M131473 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (test_bitcoin+0xcdfde)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:748:12 (test_bitcoin+0x636c75)
        [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:810 (test_bitcoin+0x636c75)
        [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/mutex:107 (test_bitcoin+0x636c75)
        [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/std_mutex.h:267 (test_bitcoin+0x636c75)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::Enter(char const*, char const*, int) /home/hebasto/GitHub/bitcoin/src/./sync.h:131 (test_bitcoin+0x636c75)
        [#6](/bitcoin-bitcoin/6/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::UniqueLock(AnnotatedMixin<std::recursive_mutex>&, char const*, char const*, int, bool) /home/hebasto/GitHub/bitcoin/src/./sync.h:152 (test_bitcoin+0x636c75)
        [#7](/bitcoin-bitcoin/7/) void (anonymous namespace)::TestPotentialDeadLockDetected<AnnotatedMixin<std::recursive_mutex> >(AnnotatedMixin<std::recursive_mutex>&, AnnotatedMixin<std::recursive_mutex>&) /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:15 (test_bitcoin+0x636c75)
        [#8](/bitcoin-bitcoin/8/) sync_tests::potential_deadlock_detected::test_method() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:42 (test_bitcoin+0x636c75)
        [#9](/bitcoin-bitcoin/9/) sync_tests::potential_deadlock_detected_invoker() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:34:1 (test_bitcoin+0x636467)
        [#10](/bitcoin-bitcoin/10/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x17ec99)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#12](/bitcoin-bitcoin/12/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
        Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message
    
      Mutex M131473 acquired here while holding mutex M131474 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (test_bitcoin+0xcdfde)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:748:12 (test_bitcoin+0x636ccb)
        [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:810 (test_bitcoin+0x636ccb)
        [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/mutex:107 (test_bitcoin+0x636ccb)
        [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/std_mutex.h:267 (test_bitcoin+0x636ccb)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::Enter(char const*, char const*, int) /home/hebasto/GitHub/bitcoin/src/./sync.h:131 (test_bitcoin+0x636ccb)
        [#6](/bitcoin-bitcoin/6/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::UniqueLock(AnnotatedMixin<std::recursive_mutex>&, char const*, char const*, int, bool) /home/hebasto/GitHub/bitcoin/src/./sync.h:152 (test_bitcoin+0x636ccb)
        [#7](/bitcoin-bitcoin/7/) void (anonymous namespace)::TestPotentialDeadLockDetected<AnnotatedMixin<std::recursive_mutex> >(AnnotatedMixin<std::recursive_mutex>&, AnnotatedMixin<std::recursive_mutex>&) /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:19 (test_bitcoin+0x636ccb)
        [#8](/bitcoin-bitcoin/8/) sync_tests::potential_deadlock_detected::test_method() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:42 (test_bitcoin+0x636ccb)
        [#9](/bitcoin-bitcoin/9/) sync_tests::potential_deadlock_detected_invoker() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:34:1 (test_bitcoin+0x636467)
        [#10](/bitcoin-bitcoin/10/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x17ec99)
        [#11](/bitcoin-bitcoin/11/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#12](/bitcoin-bitcoin/12/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
    SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/home/hebasto/GitHub/bitcoin/src/test/test_bitcoin+0xcdfde) in __interceptor_pthread_mutex_lock
    ==================
    ==================
    WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=22149)
      Cycle in lock order graph: M131476 (0x7ffedb597098) => M131477 (0x7ffedb597070) => M131476
    
      Mutex M131477 acquired here while holding mutex M131476 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (test_bitcoin+0xcdfde)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:748:12 (test_bitcoin+0x636f18)
        [#2](/bitcoin-bitcoin/2/) std::mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/std_mutex.h:103 (test_bitcoin+0x636f18)
        [#3](/bitcoin-bitcoin/3/) std::unique_lock<std::mutex>::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/std_mutex.h:267 (test_bitcoin+0x636f18)
        [#4](/bitcoin-bitcoin/4/) UniqueLock<AnnotatedMixin<std::mutex>, std::unique_lock<std::mutex> >::Enter(char const*, char const*, int) /home/hebasto/GitHub/bitcoin/src/./sync.h:131 (test_bitcoin+0x636f18)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::mutex>, std::unique_lock<std::mutex> >::UniqueLock(AnnotatedMixin<std::mutex>&, char const*, char const*, int, bool) /home/hebasto/GitHub/bitcoin/src/./sync.h:152 (test_bitcoin+0x636f18)
        [#6](/bitcoin-bitcoin/6/) void (anonymous namespace)::TestPotentialDeadLockDetected<AnnotatedMixin<std::mutex> >(AnnotatedMixin<std::mutex>&, AnnotatedMixin<std::mutex>&) /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:15 (test_bitcoin+0x636f18)
        [#7](/bitcoin-bitcoin/7/) sync_tests::potential_deadlock_detected::test_method() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:45 (test_bitcoin+0x636f18)
        [#8](/bitcoin-bitcoin/8/) sync_tests::potential_deadlock_detected_invoker() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:34:1 (test_bitcoin+0x636467)
        [#9](/bitcoin-bitcoin/9/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x17ec99)
        [#10](/bitcoin-bitcoin/10/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#11](/bitcoin-bitcoin/11/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
        Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message
    
      Mutex M131476 acquired here while holding mutex M131477 in main thread:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (test_bitcoin+0xcdfde)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:748:12 (test_bitcoin+0x636f65)
        [#2](/bitcoin-bitcoin/2/) std::mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/std_mutex.h:103 (test_bitcoin+0x636f65)
        [#3](/bitcoin-bitcoin/3/) std::unique_lock<std::mutex>::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/std_mutex.h:267 (test_bitcoin+0x636f65)
        [#4](/bitcoin-bitcoin/4/) UniqueLock<AnnotatedMixin<std::mutex>, std::unique_lock<std::mutex> >::Enter(char const*, char const*, int) /home/hebasto/GitHub/bitcoin/src/./sync.h:131 (test_bitcoin+0x636f65)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::mutex>, std::unique_lock<std::mutex> >::UniqueLock(AnnotatedMixin<std::mutex>&, char const*, char const*, int, bool) /home/hebasto/GitHub/bitcoin/src/./sync.h:152 (test_bitcoin+0x636f65)
        [#6](/bitcoin-bitcoin/6/) void (anonymous namespace)::TestPotentialDeadLockDetected<AnnotatedMixin<std::mutex> >(AnnotatedMixin<std::mutex>&, AnnotatedMixin<std::mutex>&) /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:19 (test_bitcoin+0x636f65)
        [#7](/bitcoin-bitcoin/7/) sync_tests::potential_deadlock_detected::test_method() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:45 (test_bitcoin+0x636f65)
        [#8](/bitcoin-bitcoin/8/) sync_tests::potential_deadlock_detected_invoker() /home/hebasto/GitHub/bitcoin/src/test/sync_tests.cpp:34:1 (test_bitcoin+0x636467)
        [#9](/bitcoin-bitcoin/9/) boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11 (test_bitcoin+0x17ec99)
        [#10](/bitcoin-bitcoin/10/) boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd)
        [#11](/bitcoin-bitcoin/11/) __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 (libc.so.6+0x21b96)
    
    SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/home/hebasto/GitHub/bitcoin/src/test/test_bitcoin+0xcdfde) in __interceptor_pthread_mutex_lock
    ==================
    
    *** No errors detected
    ThreadSanitizer: reported 2 warnings
    
  7. MarcoFalke commented at 11:53 PM on May 8, 2020: member

    I don't think it is possible to run tsan on BDB.

    Have you seen the suppressions in ./test/sanitizer_suppressions/tsan?

  8. hebasto commented at 6:53 AM on May 22, 2020: member

    Closing in favor of #19047 which has cleaner problem description.

  9. hebasto closed this on May 22, 2020

  10. DrahtBot locked this on Feb 15, 2022

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-02 18:14 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me