Replace all of the RecursiveMutex instances with the Mutex ones #19303

issue hebasto openend this issue on June 17, 2020
  1. hebasto commented at 1:45 pm on June 17, 2020: member

    UPD 2023-04-18. See a shortlist here.


    This is a tracking issue for the long-term goal to replace all of the RecursiveMutex instances with the Mutex ones throughout the code base.

    Anthony Williams (C++ Concurrency in Action, 2019, 3.3.3 Recursive locking):

    Most of the time, if you think you want a recursive mutex, you probably need to change your design instead.

    Anthony Towns, #19303 (comment):

    … the actual goal is “make locking logic easier to follow” rather than “remove RecurviseMutex”

    Should be noted, to insure that mutex locking policy has not been changed by accident in non-trivial cases, all of the related code branches must be covered by appropriate lock assertions: AssertLockHeld() or AssertLockNotHeld().

    Also Clang Thread Safety Analysis annotations with Negative Capabilities are very useful (see #19249) but are not a panacea, of course :)


    • RecursiveMutex cs_Shutdown (#19180)
    • RecursiveMutex cs_nTimeOffset (#19189)
    • RecursiveMutex cs_proxyInfos (#19190)
    • RecursiveMutex csPathCached (#19213)
    • RecursiveMutex cs_warnings (#19220)
    • RecursiveMutex CAddrMan::cs (#19238)
    • RecursiveMutex BanMan::m_cs_banned (#24092, #24097)
    • RecursiveMutex cs_mapLocalHost (#24099)
    • RecursiveMutex CConnman::cs_totalBytesRecv (#22829)
    • RecursiveMutex CConnman::cs_totalBytesSent (#24157)
    • RecursiveMutex CConnman::m_addr_fetches_mutex (#22829)
    • RecursiveMutex CConnman::cs_vAddedNodes (#22829)
    • RecursiveMutex CConnman::m_nodes_mutex
    • RecursiveMutex CNode::cs_vSend (#19915)
    • RecursiveMutex CNode::cs_hSocket (#19915)
    • RecursiveMutex CNode::cs_vRecv (#19915)
    • RecursiveMutex CNode::cs_vProcessMsg (#24122)
    • RecursiveMutex CNode::cs_sendProcessing (#25597)
    • RecursiveMutex CNode::cs_SubVer (#24079)
    • RecursiveMutex CNode::cs_inventory (#19347)
    • RecursiveMutex CNode::cs_addrName (removed in #22782)
    • RecursiveMutex CNode::cs_addrLocal #24108
    • RecursiveMutex Peer::TxRelay::m_bloom_filter_mutex
    • RecursiveMutex Peer::TxRelay::m_tx_inventory_mutex (#24125)
    • RecursiveMutex CNode::TxRelay::cs_feeFilter (#18819)
    • RecursiveMutex g_cs_orphans
    • RecursiveMutex g_cs_recent_confirmed_transactions (#19378)
    • RecursiveMutex cs_most_recent_block (#24062)
    • RecursiveMutex CBlockPolicyEstimator::m_cs_fee_estimator (#22014)
    • RecursiveMutex cs_rpcWarmup (#19399)
    • RecursiveMutex SingleThreadedSchedulerClient::m_cs_callbacks_pending (#24069)
    • RecursiveMutex BlockManager::cs_LastBlockFile
    • RecursiveMutex FillableSigningProvider::cs_KeyStore
    • RecursiveMutex ArgsManager::cs_args
    • RecursiveMutex CChainState::cs_nBlockSequenceId (#22824)
    • RecursiveMutex CChainState::m_cs_chainstate (#24103)
    • RecursiveMutex cs_db
    • RecursiveMutex DescriptorScriptPubKeyMan::cs_desc_man
    • RecursiveMutex cs_wallets (#19101)
    • RecursiveMutex CWallet::cs_wallet (#19773, #19833)

    and

  2. hebasto commented at 8:42 am on June 18, 2020: member

    From IRC discussion on 2020-06-18:

    <sipa> recursive mutexes are evil <sipa> there is probably a place for them, like goto <sipa> but almost always, they just lead to badly designed abstractions <sipa> a clear design should have code that operates outside the critical section, and code that operates inside <sipa> but not code that works in both <gwillen> my impression is that the usual better approach is to have Foo() which calls Foo_locked(), and callers who already hold the mutex can call the latter directly <sipa> indeed

  3. hebasto commented at 8:59 am on June 18, 2020: member
  4. ryanofsky commented at 1:26 pm on June 18, 2020: contributor
    +0.5 concept ACK for this as a low-priority janitorial project, since it can make code easier to reason about. I wouldn’t prioritize working on this over working on user-visible bugfixes and improvements. I wouldn’t even prioritize this over similar cleanups like removing cases of gui blocking #16874 (comment). But it is better to do this than not to do this.
  5. maflcko added the label Refactoring on Jun 18, 2020
  6. maflcko added the label Brainstorming on Jun 18, 2020
  7. maflcko commented at 2:43 pm on June 18, 2020: member
    I don’t mind trivial to review changes that are obviously correct and only replace RecursiveMutex with Mutex like commit 1a9ef1d398dd14728b6bc67a89139cdf827c9753. More invasive refactors are hard to prioritize due to the conflicts they cause with non-refactoring changes.
  8. hebasto commented at 2:50 pm on June 18, 2020: member

    I don’t mind trivial to review changes that are obviously correct and only replace RecursiveMutex with Mutex like commit 1a9ef1d. More invasive refactors are hard to prioritize due to the conflicts they cause with non-refactoring changes.

    It is assumed that there will be no non-refactoring changes (e.g., #19306).

  9. ajtowns commented at 7:21 am on June 20, 2020: contributor
    Makes sense, provided the actual goal is “make locking logic easier to follow” rather than “remove RecurviseMutex” – if removing RecursiveMutex makes the code/reasoning more complex, it’s not a good idea. (The if (mempool_locked) stuff in #19306 seems more complex, for instance)
  10. hebasto commented at 12:21 pm on June 20, 2020: member

    @ajtowns

    Makes sense, provided the actual goal is “make locking logic easier to follow” rather than “remove RecurviseMutex”…

    Sure! The final goal is to “make locking logic easier to follow”. Btw, I’ve started this work while reasoning about issues like #17397.

    … if removing RecursiveMutex makes the code/reasoning more complex, it’s not a good idea.

    I think the opposite. Adding simple wrappers to differentiate functions by mutex locking condition does not make the code/reasoning more complex. This refactoring just reveals the actual code comlexity.

    The if (mempool_locked) stuff in #19306 seems more complex, for instance

    Yes, I’ve used this stuff in 72f7486b5ebe96762c5d5a68849c61e58c812ffd and 21787abedd7a0808c0175a0b1d795df97fd3b970 as a quick-and-dirty solution to fix broken tests.

  11. maflcko referenced this in commit c8fa03d176 on Jun 25, 2020
  12. laanwj referenced this in commit 2af56d6d5c on Jun 29, 2020
  13. maflcko referenced this in commit bab4cce1b0 on Sep 1, 2020
  14. sidhujag referenced this in commit ed409a3f99 on Sep 3, 2020
  15. maflcko referenced this in commit 417f95fa45 on Jan 5, 2021
  16. sidhujag referenced this in commit e01d44f50b on Jan 5, 2021
  17. maflcko referenced this in commit 3a2c84a6b5 on Jun 14, 2021
  18. maflcko referenced this in commit 7be143a960 on Aug 30, 2021
  19. sidhujag referenced this in commit 16d4b8d9dc on Aug 30, 2021
  20. maflcko referenced this in commit 76392b042e on Nov 25, 2021
  21. maflcko referenced this in commit 0b30bdd519 on Dec 2, 2021
  22. sidhujag referenced this in commit c6c63e40d8 on Dec 3, 2021
  23. maflcko referenced this in commit dbf81a73e3 on Jan 17, 2022
  24. maflcko referenced this in commit 427e9c9435 on Jan 17, 2022
  25. sidhujag referenced this in commit 2ec7929b1c on Jan 18, 2022
  26. sidhujag referenced this in commit 808dbb9d51 on Jan 18, 2022
  27. maflcko referenced this in commit 1824644a36 on Jan 20, 2022
  28. maflcko referenced this in commit b32f0d3af1 on Jan 24, 2022
  29. sidhujag referenced this in commit 180b45eb36 on Jan 28, 2022
  30. maflcko referenced this in commit ad05e68e17 on Jan 31, 2022
  31. PastaPastaPasta referenced this in commit 9fb9404949 on Mar 13, 2022
  32. PastaPastaPasta referenced this in commit 80c1316da7 on Mar 13, 2022
  33. laanwj referenced this in commit a19f641a80 on Apr 26, 2022
  34. maflcko referenced this in commit 0be1dc1f56 on May 17, 2022
  35. sidhujag referenced this in commit b1ab840410 on May 28, 2022
  36. vijaydasmp referenced this in commit ebc27ccc4d on Jan 9, 2023
  37. vijaydasmp referenced this in commit 0f32add525 on Jan 13, 2023
  38. vijaydasmp referenced this in commit 1a45924b6b on Jan 18, 2023
  39. vijaydasmp referenced this in commit 01d2e88e9b on Jan 19, 2023
  40. vijaydasmp referenced this in commit 623d580f42 on Feb 17, 2023
  41. vijaydasmp referenced this in commit 566b399dfd on Feb 19, 2023
  42. vijaydasmp referenced this in commit 6b51b18a11 on Feb 20, 2023
  43. vijaydasmp referenced this in commit 5069b6d3c8 on Feb 20, 2023
  44. vijaydasmp referenced this in commit 8a04618b1e on Feb 24, 2023
  45. vijaydasmp referenced this in commit 9528c12d16 on Mar 5, 2023
  46. vijaydasmp referenced this in commit a7eca79539 on Mar 10, 2023
  47. vijaydasmp referenced this in commit 2900ec8082 on Mar 13, 2023
  48. vijaydasmp referenced this in commit 836f463801 on Mar 14, 2023
  49. PastaPastaPasta referenced this in commit 20fb6158a5 on Apr 15, 2023
  50. PastaPastaPasta referenced this in commit 75ebc275e0 on Apr 15, 2023
  51. hebasto commented at 3:13 pm on April 18, 2023: member

    A shortlist of remaining class members recursive mutexes at 2fa7344aa9bbce8069ebd6bef5f6a22f0b7c5c56:

    • BanMan::m_cs_banned in banman.h#24097

    • CConnman::m_nodes_mutex in net.h

    • TxRelay::m_bloom_filter_mutex in net_processing.cpp

    • TxRelay::m_tx_inventory_mutex in net_processing.cpp#24125

    • BlockManager::cs_LastBlockFile in node/blockstorage.h

    • FillableSigningProvider::cs_KeyStore in script/signingprovider.h

    • ArgsManager::cs_args in util/system.h

    • DescriptorScriptPubKeyMan::cs_desc_man in wallet/scriptpubkeyman.h

  52. hebasto commented at 0:27 am on April 19, 2023: member

    This may also fix the false-positive

    https://github.com/bitcoin/bitcoin/blob/2fa7344aa9bbce8069ebd6bef5f6a22f0b7c5c56/test/sanitizer_suppressions/tsan#L15-L16

    FWIW, I’m not able to reproduce “deadlock” TSan warning using clang-14 starting from 9996b1806a189a9632c9f5023489eb47bf87ca05 when depends can be compiled. Last time the warning was observed for clang-10.

  53. maflcko commented at 7:27 am on April 19, 2023: member
    You should be able to see it in the tsan CI task or with libc++ locally?
  54. fanquake commented at 8:54 am on April 19, 2023: member

    You should be able to see it in the tsan CI task or with libc++ locally?

    I don’t currently reproduce on x86_64 with master +:

     0--- a/test/sanitizer_suppressions/tsan
     1+++ b/test/sanitizer_suppressions/tsan
     2@@ -12,9 +12,6 @@ race:DatabaseBatch
     3 race:zmq::*
     4 race:bitcoin-qt
     5 
     6-# deadlock (TODO fix)
     7-deadlock:Chainstate::ConnectTip
     8-
     9 # Intentional deadlock in tests
    10 deadlock:sync_tests::potential_deadlock_detected
    

    and

     0time FILE_ENV="./ci/test/00_setup_env_native_tsan.sh" ./ci/test_run_all.sh
     1...
     2wallet_upgradewallet.py --legacy-wallet                | â—‹ Skipped | 0 s
     3
     4ALL                                                    | ✓ Passed  | 3484 s (accumulated) 
     5Runtime: 990 s
     6
     7Stop and remove CI container by ID
     8d726f7b16435da0d5d35171cc39363cd85be5b22d6fbbfffc28983691d99854b
     9
    10real	46m40.485s
    
  55. hebasto commented at 1:34 pm on April 19, 2023: member

    You should be able to see it in the tsan CI task or with libc++ locally?

    The TSan CI job is pretty stable @ 760651214cd205b91804bc1c40a31c614d3aa26c, and removing the deadlock:Chainstate::ConnectTip suppression does not cause any failure.

    My guess is that this is a byproduct of clang upgrade.

  56. maflcko commented at 3:20 pm on April 19, 2023: member

    Steps to reproduce on a fresh install of Fedora 38:

    • dnf install gcc-c++ libtool make autoconf automake python3 clang llvm lbzip2 patch xz cmake curl wget htop git vim ccache libevent-devel boost-devel -y && git clone https://github.com/bitcoin/bitcoin.git --depth=1 ./bitcoin-core && cd bitcoin-core
    • ./autogen.sh && ./configure CC=clang CXX=clang++ --with-sanitizers=thread && make -j $(nproc)
    • TSAN_OPTIONS="suppressions=$(pwd)/test/sanitizer_suppressions/tsan:halt_on_error=1:second_deadlock_stack=1" ./test/functional/p2p_segwit.py

    With diff:

     0diff --git a/test/sanitizer_suppressions/tsan b/test/sanitizer_suppressions/tsan
     1index d331991..dec1ca5 100644
     2--- a/test/sanitizer_suppressions/tsan
     3+++ b/test/sanitizer_suppressions/tsan
     4@@ -13,7 +13,6 @@ race:zmq::*
     5 race:bitcoin-qt
     6 
     7 # deadlock (TODO fix)
     8-deadlock:Chainstate::ConnectTip
     9 
    10 # Intentional deadlock in tests
    11 deadlock:sync_tests::potential_deadlock_detected
    
  57. maflcko commented at 3:22 pm on April 19, 2023: member
      0 node0 stderr ==================
      1WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=13857)
      2  Cycle in lock order graph: M0 (0x7b6400005068) => M1 (0x7b440001ffa8) => M2 (0x7b5400003ee0) => M0
      3
      4  Mutex M1 acquired here while holding mutex M0 in thread T10:
      5    [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
      6    [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:749:12 (bitcoind+0x2ded49) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
      7    [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:811:10 (bitcoind+0x2ded49)
      8    [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/mutex:120:17 (bitcoind+0x2ded49)
      9    [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_lock.h:141:17 (bitcoind+0x2ded49)
     10    [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::Enter(char const*, char const*, int) src/./sync.h:164:15 (bitcoind+0x2ded49)
     11    [#6](/bitcoin-bitcoin/6/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::UniqueLock(AnnotatedMixin<std::recursive_mutex>&, char const*, char const*, int, bool) src/./sync.h:183:13 (bitcoind+0x2ded49)
     12    [#7](/bitcoin-bitcoin/7/) (anonymous namespace)::PeerManagerImpl::RelayTransaction(uint256 const&, uint256 const&) src/net_processing.cpp:2044:9 (bitcoind+0x2ded49)
     13    [#8](/bitcoin-bitcoin/8/) (anonymous namespace)::PeerManagerImpl::ProcessMessage(CNode&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, CDataStream&, std::chrono::duration<long, std::ratio<1l, 1000000l>>, std::atomic<bool> const&) src/net_processing.cpp:4050:13 (bitcoind+0x2e85b1) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     14    [#9](/bitcoin-bitcoin/9/) (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp:4917:9 (bitcoind+0x2f2159) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     15    [#10](/bitcoin-bitcoin/10/) non-virtual thunk to (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp (bitcoind+0x2fcbcf) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     16    [#11](/bitcoin-bitcoin/11/) CConnman::ThreadMessageHandler() src/net.cpp:2066:49 (bitcoind+0x2afaad) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     17    [#12](/bitcoin-bitcoin/12/) CConnman::Start(CScheduler&, CConnman::Options const&)::$_5::operator()() const src/net.cpp:2408:80 (bitcoind+0x2bfb63) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     18    [#13](/bitcoin-bitcoin/13/) void std::__invoke_impl<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(std::__invoke_other, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfb63)
     19    [#14](/bitcoin-bitcoin/14/) std::enable_if<is_invocable_r_v<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>, void>::type std::__invoke_r<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:111:2 (bitcoind+0x2bfb63)
     20    [#15](/bitcoin-bitcoin/15/) std::_Function_handler<void (), CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:290:9 (bitcoind+0x2bfb63)
     21    [#16](/bitcoin-bitcoin/16/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:591:9 (bitcoind+0x9559d9) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     22    [#17](/bitcoin-bitcoin/17/) util::TraceThread(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>) src/util/thread.cpp:21:9 (bitcoind+0x9559d9)
     23    [#18](/bitcoin-bitcoin/18/) void std::__invoke_impl<void, void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(std::__invoke_other, void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfa82) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     24    [#19](/bitcoin-bitcoin/19/) std::__invoke_result<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::type std::__invoke<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14 (bitcoind+0x2bfa82)
     25    [#20](/bitcoin-bitcoin/20/) void std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:292:13 (bitcoind+0x2bfa82)
     26    [#21](/bitcoin-bitcoin/21/) std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:299:11 (bitcoind+0x2bfa82)
     27    [#22](/bitcoin-bitcoin/22/) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>>::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:244:13 (bitcoind+0x2bfa82)
     28    [#23](/bitcoin-bitcoin/23/) <null> <null> (libstdc++.so.6+0xe31e2) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
     29
     30  Mutex M0 previously acquired by the same thread here:
     31    [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     32    [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:749:12 (bitcoind+0x2dec75) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     33    [#2](/bitcoin-bitcoin/2/) std::mutex::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_mutex.h:113:17 (bitcoind+0x2dec75)
     34    [#3](/bitcoin-bitcoin/3/) std::unique_lock<std::mutex>::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_lock.h:141:17 (bitcoind+0x2dec75)
     35    [#4](/bitcoin-bitcoin/4/) UniqueLock<AnnotatedMixin<std::mutex>>::Enter(char const*, char const*, int) src/./sync.h:164:15 (bitcoind+0x2dec75)
     36    [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::mutex>>::UniqueLock(AnnotatedMixin<std::mutex>&, char const*, char const*, int, bool) src/./sync.h:183:13 (bitcoind+0x2dec75)
     37    [#6](/bitcoin-bitcoin/6/) (anonymous namespace)::PeerManagerImpl::RelayTransaction(uint256 const&, uint256 const&) src/net_processing.cpp:2038:5 (bitcoind+0x2dec75)
     38    [#7](/bitcoin-bitcoin/7/) (anonymous namespace)::PeerManagerImpl::ProcessMessage(CNode&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, CDataStream&, std::chrono::duration<long, std::ratio<1l, 1000000l>>, std::atomic<bool> const&) src/net_processing.cpp:4050:13 (bitcoind+0x2e85b1) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     39    [#8](/bitcoin-bitcoin/8/) (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp:4917:9 (bitcoind+0x2f2159) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     40    [#9](/bitcoin-bitcoin/9/) non-virtual thunk to (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp (bitcoind+0x2fcbcf) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     41    [#10](/bitcoin-bitcoin/10/) CConnman::ThreadMessageHandler() src/net.cpp:2066:49 (bitcoind+0x2afaad) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     42    [#11](/bitcoin-bitcoin/11/) CConnman::Start(CScheduler&, CConnman::Options const&)::$_5::operator()() const src/net.cpp:2408:80 (bitcoind+0x2bfb63) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     43    [#12](/bitcoin-bitcoin/12/) void std::__invoke_impl<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(std::__invoke_other, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfb63)
     44    [#13](/bitcoin-bitcoin/13/) std::enable_if<is_invocable_r_v<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>, void>::type std::__invoke_r<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:111:2 (bitcoind+0x2bfb63)
     45    [#14](/bitcoin-bitcoin/14/) std::_Function_handler<void (), CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:290:9 (bitcoind+0x2bfb63)
     46    [#15](/bitcoin-bitcoin/15/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:591:9 (bitcoind+0x9559d9) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     47    [#16](/bitcoin-bitcoin/16/) util::TraceThread(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>) src/util/thread.cpp:21:9 (bitcoind+0x9559d9)
     48    [#17](/bitcoin-bitcoin/17/) void std::__invoke_impl<void, void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(std::__invoke_other, void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfa82) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     49    [#18](/bitcoin-bitcoin/18/) std::__invoke_result<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::type std::__invoke<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14 (bitcoind+0x2bfa82)
     50    [#19](/bitcoin-bitcoin/19/) void std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:292:13 (bitcoind+0x2bfa82)
     51    [#20](/bitcoin-bitcoin/20/) std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:299:11 (bitcoind+0x2bfa82)
     52    [#21](/bitcoin-bitcoin/21/) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>>::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:244:13 (bitcoind+0x2bfa82)
     53    [#22](/bitcoin-bitcoin/22/) <null> <null> (libstdc++.so.6+0xe31e2) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
     54
     55  Mutex M2 acquired here while holding mutex M1 in thread T10:
     56    [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     57    [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:749:12 (bitcoind+0x648bfe) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     58    [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:811:10 (bitcoind+0x648bfe)
     59    [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/mutex:120:17 (bitcoind+0x648bfe)
     60    [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_lock.h:141:17 (bitcoind+0x648bfe)
     61    [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::Enter(char const*, char const*, int) src/./sync.h:164:15 (bitcoind+0x648bfe)
     62    [#6](/bitcoin-bitcoin/6/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::UniqueLock(AnnotatedMixin<std::recursive_mutex>&, char const*, char const*, int, bool) src/./sync.h:183:13 (bitcoind+0x648bfe)
     63    [#7](/bitcoin-bitcoin/7/) CTxMemPool::info(GenTxid const&) const src/txmempool.cpp:842:5 (bitcoind+0x648bfe)
     64    [#8](/bitcoin-bitcoin/8/) (anonymous namespace)::PeerManagerImpl::SendMessages(CNode*) src/net_processing.cpp:5677:49 (bitcoind+0x2f8a30) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     65    [#9](/bitcoin-bitcoin/9/) non-virtual thunk to (anonymous namespace)::PeerManagerImpl::SendMessages(CNode*) src/net_processing.cpp (bitcoind+0x2fcc53) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     66    [#10](/bitcoin-bitcoin/10/) CConnman::ThreadMessageHandler() src/net.cpp:2071:28 (bitcoind+0x2afb26) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     67    [#11](/bitcoin-bitcoin/11/) CConnman::Start(CScheduler&, CConnman::Options const&)::$_5::operator()() const src/net.cpp:2408:80 (bitcoind+0x2bfb63) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     68    [#12](/bitcoin-bitcoin/12/) void std::__invoke_impl<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(std::__invoke_other, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfb63)
     69    [#13](/bitcoin-bitcoin/13/) std::enable_if<is_invocable_r_v<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>, void>::type std::__invoke_r<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:111:2 (bitcoind+0x2bfb63)
     70    [#14](/bitcoin-bitcoin/14/) std::_Function_handler<void (), CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:290:9 (bitcoind+0x2bfb63)
     71    [#15](/bitcoin-bitcoin/15/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:591:9 (bitcoind+0x9559d9) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     72    [#16](/bitcoin-bitcoin/16/) util::TraceThread(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>) src/util/thread.cpp:21:9 (bitcoind+0x9559d9)
     73    [#17](/bitcoin-bitcoin/17/) void std::__invoke_impl<void, void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(std::__invoke_other, void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfa82) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     74    [#18](/bitcoin-bitcoin/18/) std::__invoke_result<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::type std::__invoke<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14 (bitcoind+0x2bfa82)
     75    [#19](/bitcoin-bitcoin/19/) void std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:292:13 (bitcoind+0x2bfa82)
     76    [#20](/bitcoin-bitcoin/20/) std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:299:11 (bitcoind+0x2bfa82)
     77    [#21](/bitcoin-bitcoin/21/) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>>::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:244:13 (bitcoind+0x2bfa82)
     78    [#22](/bitcoin-bitcoin/22/) <null> <null> (libstdc++.so.6+0xe31e2) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
     79
     80  Mutex M1 previously acquired by the same thread here:
     81    [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     82    [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:749:12 (bitcoind+0x26349f) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     83    [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:811:10 (bitcoind+0x26349f)
     84    [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/mutex:120:17 (bitcoind+0x26349f)
     85    [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_lock.h:141:17 (bitcoind+0x26349f)
     86    [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::Enter(char const*, char const*, int) src/./sync.h:164:15 (bitcoind+0x26349f)
     87    [#6](/bitcoin-bitcoin/6/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::UniqueLock(AnnotatedMixin<std::recursive_mutex>&, char const*, char const*, int, bool) src/./sync.h:183:13 (bitcoind+0x26349f)
     88    [#7](/bitcoin-bitcoin/7/) (anonymous namespace)::PeerManagerImpl::SendMessages(CNode*) src/net_processing.cpp:5598:17 (bitcoind+0x2f7f7a) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     89    [#8](/bitcoin-bitcoin/8/) non-virtual thunk to (anonymous namespace)::PeerManagerImpl::SendMessages(CNode*) src/net_processing.cpp (bitcoind+0x2fcc53) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     90    [#9](/bitcoin-bitcoin/9/) CConnman::ThreadMessageHandler() src/net.cpp:2071:28 (bitcoind+0x2afb26) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     91    [#10](/bitcoin-bitcoin/10/) CConnman::Start(CScheduler&, CConnman::Options const&)::$_5::operator()() const src/net.cpp:2408:80 (bitcoind+0x2bfb63) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     92    [#11](/bitcoin-bitcoin/11/) void std::__invoke_impl<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(std::__invoke_other, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfb63)
     93    [#12](/bitcoin-bitcoin/12/) std::enable_if<is_invocable_r_v<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>, void>::type std::__invoke_r<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:111:2 (bitcoind+0x2bfb63)
     94    [#13](/bitcoin-bitcoin/13/) std::_Function_handler<void (), CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:290:9 (bitcoind+0x2bfb63)
     95    [#14](/bitcoin-bitcoin/14/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:591:9 (bitcoind+0x9559d9) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     96    [#15](/bitcoin-bitcoin/15/) util::TraceThread(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>) src/util/thread.cpp:21:9 (bitcoind+0x9559d9)
     97    [#16](/bitcoin-bitcoin/16/) void std::__invoke_impl<void, void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(std::__invoke_other, void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfa82) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
     98    [#17](/bitcoin-bitcoin/17/) std::__invoke_result<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::type std::__invoke<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14 (bitcoind+0x2bfa82)
     99    [#18](/bitcoin-bitcoin/18/) void std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:292:13 (bitcoind+0x2bfa82)
    100    [#19](/bitcoin-bitcoin/19/) std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:299:11 (bitcoind+0x2bfa82)
    101    [#20](/bitcoin-bitcoin/20/) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>>::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:244:13 (bitcoind+0x2bfa82)
    102    [#21](/bitcoin-bitcoin/21/) <null> <null> (libstdc++.so.6+0xe31e2) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
    103
    104  Mutex M0 acquired here while holding mutex M2 in thread T10:
    105    [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    106    [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:749:12 (bitcoind+0x2fd6fb) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    107    [#2](/bitcoin-bitcoin/2/) std::mutex::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_mutex.h:113:17 (bitcoind+0x2fd6fb)
    108    [#3](/bitcoin-bitcoin/3/) std::unique_lock<std::mutex>::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_lock.h:141:17 (bitcoind+0x2fd6fb)
    109    [#4](/bitcoin-bitcoin/4/) UniqueLock<AnnotatedMixin<std::mutex>>::Enter(char const*, char const*, int) src/./sync.h:164:15 (bitcoind+0x2fd6fb)
    110    [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::mutex>>::UniqueLock(AnnotatedMixin<std::mutex>&, char const*, char const*, int, bool) src/./sync.h:183:13 (bitcoind+0x2fd6fb)
    111    [#6](/bitcoin-bitcoin/6/) (anonymous namespace)::PeerManagerImpl::GetPeerRef(long) const src/net_processing.cpp:1549:5 (bitcoind+0x2fd6fb)
    112    [#7](/bitcoin-bitcoin/7/) (anonymous namespace)::PeerManagerImpl::MaybePunishNodeForBlock(long, BlockValidationState const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) src/net_processing.cpp:1653:18 (bitcoind+0x2fd6fb)
    113    [#8](/bitcoin-bitcoin/8/) (anonymous namespace)::PeerManagerImpl::BlockChecked(CBlock const&, BlockValidationState const&) src/net_processing.cpp:1977:13 (bitcoind+0x2dbe68) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    114    [#9](/bitcoin-bitcoin/9/) CMainSignals::BlockChecked(CBlock const&, BlockValidationState const&)::$_0::operator()(CValidationInterface&) const src/validationinterface.cpp:256:75 (bitcoind+0x6e4cda) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    115    [#10](/bitcoin-bitcoin/10/) void MainSignalsImpl::Iterate<CMainSignals::BlockChecked(CBlock const&, BlockValidationState const&)::$_0>(CMainSignals::BlockChecked(CBlock const&, BlockValidationState const&)::$_0&&) src/validationinterface.cpp:88:17 (bitcoind+0x6e4cda)
    116    [#11](/bitcoin-bitcoin/11/) CMainSignals::BlockChecked(CBlock const&, BlockValidationState const&) src/validationinterface.cpp:256:18 (bitcoind+0x6e4cda)
    117    [#12](/bitcoin-bitcoin/12/) Chainstate::ConnectTip(BlockValidationState&, CBlockIndex*, std::shared_ptr<CBlock const> const&, ConnectTrace&, DisconnectedBlockTransactions&) src/validation.cpp:2838:26 (bitcoind+0x6888fb) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    118    [#13](/bitcoin-bitcoin/13/) Chainstate::ActivateBestChainStep(BlockValidationState&, CBlockIndex*, std::shared_ptr<CBlock const> const&, bool&, ConnectTrace&) src/validation.cpp:3028:18 (bitcoind+0x68c310) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    119    [#14](/bitcoin-bitcoin/14/) Chainstate::ActivateBestChain(BlockValidationState&, std::shared_ptr<CBlock const>) src/validation.cpp:3163:22 (bitcoind+0x68cf7d) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    120    [#15](/bitcoin-bitcoin/15/) ChainstateManager::ProcessNewBlock(std::shared_ptr<CBlock const> const&, bool, bool, bool*) src/validation.cpp:4041:29 (bitcoind+0x69b758) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    121    [#16](/bitcoin-bitcoin/16/) (anonymous namespace)::PeerManagerImpl::ProcessBlock(CNode&, std::shared_ptr<CBlock const> const&, bool, bool) src/net_processing.cpp:3154:16 (bitcoind+0x319cf3) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    122    [#17](/bitcoin-bitcoin/17/) (anonymous namespace)::PeerManagerImpl::ProcessMessage(CNode&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, CDataStream&, std::chrono::duration<long, std::ratio<1l, 1000000l>>, std::atomic<bool> const&) src/net_processing.cpp:4558:9 (bitcoind+0x2ea5f7) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    123    [#18](/bitcoin-bitcoin/18/) (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp:4917:9 (bitcoind+0x2f2159) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    124    [#19](/bitcoin-bitcoin/19/) non-virtual thunk to (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp (bitcoind+0x2fcbcf) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    125    [#20](/bitcoin-bitcoin/20/) CConnman::ThreadMessageHandler() src/net.cpp:2066:49 (bitcoind+0x2afaad) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    126    [#21](/bitcoin-bitcoin/21/) CConnman::Start(CScheduler&, CConnman::Options const&)::$_5::operator()() const src/net.cpp:2408:80 (bitcoind+0x2bfb63) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    127    [#22](/bitcoin-bitcoin/22/) void std::__invoke_impl<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(std::__invoke_other, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfb63)
    128    [#23](/bitcoin-bitcoin/23/) std::enable_if<is_invocable_r_v<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>, void>::type std::__invoke_r<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:111:2 (bitcoind+0x2bfb63)
    129    [#24](/bitcoin-bitcoin/24/) std::_Function_handler<void (), CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:290:9 (bitcoind+0x2bfb63)
    130    [#25](/bitcoin-bitcoin/25/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:591:9 (bitcoind+0x9559d9) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    131    [#26](/bitcoin-bitcoin/26/) util::TraceThread(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>) src/util/thread.cpp:21:9 (bitcoind+0x9559d9)
    132    [#27](/bitcoin-bitcoin/27/) void std::__invoke_impl<void, void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(std::__invoke_other, void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfa82) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    133    [#28](/bitcoin-bitcoin/28/) std::__invoke_result<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::type std::__invoke<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14 (bitcoind+0x2bfa82)
    134    [#29](/bitcoin-bitcoin/29/) void std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:292:13 (bitcoind+0x2bfa82)
    135    [#30](/bitcoin-bitcoin/30/) std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:299:11 (bitcoind+0x2bfa82)
    136    [#31](/bitcoin-bitcoin/31/) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>>::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:244:13 (bitcoind+0x2bfa82)
    137    [#32](/bitcoin-bitcoin/32/) <null> <null> (libstdc++.so.6+0xe31e2) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
    138
    139  Mutex M2 previously acquired by the same thread here:
    140    [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    141    [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:749:12 (bitcoind+0x68cdc3) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    142    [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:811:10 (bitcoind+0x68cdc3)
    143    [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/mutex:120:17 (bitcoind+0x68cdc3)
    144    [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/unique_lock.h:141:17 (bitcoind+0x68cdc3)
    145    [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::Enter(char const*, char const*, int) src/./sync.h:164:15 (bitcoind+0x68cdc3)
    146    [#6](/bitcoin-bitcoin/6/) UniqueLock<AnnotatedMixin<std::recursive_mutex>>::UniqueLock(AnnotatedMixin<std::recursive_mutex>*, char const*, char const*, int, bool) src/./sync.h:194:13 (bitcoind+0x68cdc3)
    147    [#7](/bitcoin-bitcoin/7/) Chainstate::ActivateBestChain(BlockValidationState&, std::shared_ptr<CBlock const>) src/validation.cpp:3144:13 (bitcoind+0x68cdc3)
    148    [#8](/bitcoin-bitcoin/8/) ChainstateManager::ProcessNewBlock(std::shared_ptr<CBlock const> const&, bool, bool, bool*) src/validation.cpp:4041:29 (bitcoind+0x69b758) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    149    [#9](/bitcoin-bitcoin/9/) (anonymous namespace)::PeerManagerImpl::ProcessBlock(CNode&, std::shared_ptr<CBlock const> const&, bool, bool) src/net_processing.cpp:3154:16 (bitcoind+0x319cf3) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    150    [#10](/bitcoin-bitcoin/10/) (anonymous namespace)::PeerManagerImpl::ProcessMessage(CNode&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, CDataStream&, std::chrono::duration<long, std::ratio<1l, 1000000l>>, std::atomic<bool> const&) src/net_processing.cpp:4558:9 (bitcoind+0x2ea5f7) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    151    [#11](/bitcoin-bitcoin/11/) (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp:4917:9 (bitcoind+0x2f2159) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    152    [#12](/bitcoin-bitcoin/12/) non-virtual thunk to (anonymous namespace)::PeerManagerImpl::ProcessMessages(CNode*, std::atomic<bool>&) src/net_processing.cpp (bitcoind+0x2fcbcf) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    153    [#13](/bitcoin-bitcoin/13/) CConnman::ThreadMessageHandler() src/net.cpp:2066:49 (bitcoind+0x2afaad) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    154    [#14](/bitcoin-bitcoin/14/) CConnman::Start(CScheduler&, CConnman::Options const&)::$_5::operator()() const src/net.cpp:2408:80 (bitcoind+0x2bfb63) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    155    [#15](/bitcoin-bitcoin/15/) void std::__invoke_impl<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(std::__invoke_other, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfb63)
    156    [#16](/bitcoin-bitcoin/16/) std::enable_if<is_invocable_r_v<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>, void>::type std::__invoke_r<void, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&>(CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:111:2 (bitcoind+0x2bfb63)
    157    [#17](/bitcoin-bitcoin/17/) std::_Function_handler<void (), CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:290:9 (bitcoind+0x2bfb63)
    158    [#18](/bitcoin-bitcoin/18/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_function.h:591:9 (bitcoind+0x9559d9) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    159    [#19](/bitcoin-bitcoin/19/) util::TraceThread(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>) src/util/thread.cpp:21:9 (bitcoind+0x9559d9)
    160    [#20](/bitcoin-bitcoin/20/) void std::__invoke_impl<void, void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(std::__invoke_other, void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:61:14 (bitcoind+0x2bfa82) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    161    [#21](/bitcoin-bitcoin/21/) std::__invoke_result<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>::type std::__invoke<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>(void (*&&)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*&&, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5&&) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/invoke.h:96:14 (bitcoind+0x2bfa82)
    162    [#22](/bitcoin-bitcoin/22/) void std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:292:13 (bitcoind+0x2bfa82)
    163    [#23](/bitcoin-bitcoin/23/) std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>::operator()() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:299:11 (bitcoind+0x2bfa82)
    164    [#24](/bitcoin-bitcoin/24/) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(std::basic_string_view<char, std::char_traits<char>>, std::function<void ()>), char const*, CConnman::Start(CScheduler&, CConnman::Options const&)::$_5>>>::_M_run() /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/std_thread.h:244:13 (bitcoind+0x2bfa82)
    165    [#25](/bitcoin-bitcoin/25/) <null> <null> (libstdc++.so.6+0xe31e2) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
    166
    167  Thread T10 'b-msghand' (tid=13884, running) created by main thread at:
    168    [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0x1a74cf) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    169    [#1](/bitcoin-bitcoin/1/) std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) <null> (libstdc++.so.6+0xe32b8) (BuildId: 2d0c1f85de7705003be97eedfc8dde2c8826e5c7)
    170    [#2](/bitcoin-bitcoin/2/) AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1850:24 (bitcoind+0x2594da) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    171    [#3](/bitcoin-bitcoin/3/) AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:222:43 (bitcoind+0x231fb0) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be)
    172    [#4](/bitcoin-bitcoin/4/) main src/bitcoind.cpp:266:13 (bitcoind+0x231fb0)
    173
    174SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/bitcoin-core/src/bitcoind+0x1a91af) (BuildId: 1db3d87bed913bc0e4da6baf5872efb9abf647be) in pthread_mutex_lock
    175================== 
    
  58. hebasto commented at 8:08 am on May 17, 2023: member

    Steps to reproduce on a fresh install of Fedora 38:

    Can be fixed by #18963.

  59. PastaPastaPasta referenced this in commit 08e43eb458 on May 24, 2023
  60. PastaPastaPasta referenced this in commit 17a4e81539 on May 24, 2023
  61. PastaPastaPasta referenced this in commit d051d1b7bd on May 24, 2023
  62. PastaPastaPasta referenced this in commit adf593cea4 on May 24, 2023
  63. PastaPastaPasta referenced this in commit 69b9dc906f on May 29, 2023
  64. PastaPastaPasta referenced this in commit c4dcba65ca on May 29, 2023
  65. PastaPastaPasta referenced this in commit bc17933568 on May 29, 2023
  66. PastaPastaPasta referenced this in commit 9187eb1d53 on May 29, 2023
  67. PastaPastaPasta referenced this in commit cc9551c853 on May 29, 2023
  68. PastaPastaPasta referenced this in commit 04ff82240f on May 29, 2023
  69. PastaPastaPasta referenced this in commit 50a228ee4d on May 29, 2023
  70. PastaPastaPasta referenced this in commit 0bc3b31bc5 on May 29, 2023
  71. PastaPastaPasta referenced this in commit 9feb82056c on May 31, 2023
  72. PastaPastaPasta referenced this in commit 3f6a996a32 on May 31, 2023
  73. PastaPastaPasta referenced this in commit 67ca59ef50 on May 31, 2023
  74. PastaPastaPasta referenced this in commit ba882e1200 on May 31, 2023
  75. vijaydasmp referenced this in commit f6729826c4 on Jul 27, 2023
  76. vijaydasmp referenced this in commit def7972bcf on Jul 28, 2023
  77. vijaydasmp referenced this in commit cd7ba53c22 on Jul 29, 2023
  78. vijaydasmp referenced this in commit d82b708583 on Jul 29, 2023
  79. vijaydasmp referenced this in commit 8690939b3b on Aug 7, 2023
  80. vijaydasmp referenced this in commit bb1e149f86 on Aug 7, 2023
  81. vijaydasmp referenced this in commit a35dc592b9 on Aug 9, 2023
  82. vijaydasmp referenced this in commit f01c83633d on Aug 9, 2023
  83. vijaydasmp referenced this in commit 3923d9206e on Aug 11, 2023
  84. PastaPastaPasta referenced this in commit 3ff5348d97 on Aug 28, 2023
  85. vijaydasmp referenced this in commit 0283b2d658 on Nov 1, 2023
  86. vijaydasmp referenced this in commit ef3583f636 on Nov 1, 2023

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: 2024-12-21 15:12 UTC

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