net: Add missing locking annotation for vNodes. vNodes is guarded by cs_vNodes. #15201

pull practicalswift wants to merge 1 commits into bitcoin:master from practicalswift:cs_vNodes changing 1 files +13 −2
  1. practicalswift commented at 3:31 PM on January 18, 2019: contributor

    Add locking annotation for vNodes. vNodes is guarded by cs_vNodes.

  2. practicalswift renamed this:
    net: Add missing cs_vNodes lock in CConnman::Stop(). Add missing locking annotation.
    net: Add missing cs_vNodes lock in CConnman::Stop(). Add missing locking annotation. [wip]
    on Jan 18, 2019
  3. practicalswift force-pushed on Jan 18, 2019
  4. practicalswift force-pushed on Jan 18, 2019
  5. fanquake added the label P2P on Jan 18, 2019
  6. DrahtBot commented at 1:51 AM on January 19, 2019: member

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    No conflicts as of last run.

  7. practicalswift force-pushed on Jan 19, 2019
  8. practicalswift renamed this:
    net: Add missing cs_vNodes lock in CConnman::Stop(). Add missing locking annotation. [wip]
    net: Add missing locking annotation for vNodes. vNodes is guarded by cs_vNodes.
    on Jan 19, 2019
  9. in src/net.cpp:2513 in e211626a6a outdated
    2500 | @@ -2501,7 +2501,7 @@ void CConnman::Interrupt()
    2501 |      }
    2502 |  }
    2503 |  
    2504 | -void CConnman::Stop()
    2505 | +void CConnman::Stop() NO_THREAD_SAFETY_ANALYSIS
    


    laanwj commented at 4:45 PM on January 19, 2019:

    Why?


    practicalswift commented at 5:04 PM on January 19, 2019:

    Good question! I added a clarifying comment:

    // TODO: Remove NO_THREAD_SAFETY_ANALYSIS. Lock cs_vNodes before reading the variable vNodes.
    //
    // When removing NO_THREAD_SAFETY_ANALYSIS be aware of the following lock order requirements:
    // * CheckForStaleTipAndEvictPeers locks cs_main before indirectly calling GetExtraOutboundCount
    //   which locks cs_vNodes.
    // * ProcessMessage locks cs_main and g_cs_orphans before indirectly calling ForEachNode which
    //   locks cs_vNodes.
    //
    // Thus the implicit locking order requirement is: (1) cs_main, (2) g_cs_orphans, (3) cs_vNodes.
    

    The problem here is that cs_vNodes needs to be locked before reading the variable vNodes.

    Adding such a lock in CConnman::Stop would be trivial, but we have to take into account the implicit locking order requirements that follow from other parts of the code. Getting a matching locking order here results in surprisingly invasive changes (at least when I did it!).

  10. practicalswift force-pushed on Jan 19, 2019
  11. practicalswift force-pushed on Jan 19, 2019
  12. practicalswift force-pushed on Jan 19, 2019
  13. Add locking annotation for vNodes. vNodes is guarded by cs_vNodes. eea02be70e
  14. practicalswift force-pushed on Jan 19, 2019
  15. practicalswift commented at 9:55 PM on February 7, 2019: contributor

    @laanwj Feedback addressed! Please re-review :-)

  16. laanwj commented at 11:42 AM on February 8, 2019: member

    Thanks! I am still somewhat skeptical about adding a lock annotation then working around it, but all in all I think the annotation has value because it still allows checking the other uses of the lock. It's also good to document the hairy situation with a comment.

    utACK eea02be70ee37b845f2719b3c08e5baf4b6f51f6

  17. MarcoFalke merged this on Feb 8, 2019
  18. MarcoFalke closed this on Feb 8, 2019

  19. MarcoFalke referenced this in commit 30495d1e75 on Feb 8, 2019
  20. MarcoFalke commented at 6:02 PM on April 11, 2019: member

    Adding the to-be-fixed data race for future reference:

    Line numbers as of bb68abe784b9fd49bddf38105d142a31ef0f9e77

    WARNING: ThreadSanitizer: data race (pid=28633)
      Write of size 8 at 0x7f94042f9328 by main thread (mutexes: write M132887):
        [#0](/bitcoin-bitcoin/0/) std::vector<CNode*, std::allocator<CNode*> >::_M_erase_at_end(CNode**) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/stl_vector.h:1439 (bitcoind+0x0000005216ff)
        [#1](/bitcoin-bitcoin/1/) std::vector<CNode*, std::allocator<CNode*> >::clear() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/stl_vector.h:1212 (bitcoind+0x0000005216ff)
        [#2](/bitcoin-bitcoin/2/) CConnman::Stop() /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/net.cpp:2351 (bitcoind+0x0000005216ff)
        [#3](/bitcoin-bitcoin/3/) Shutdown(InitInterfaces&) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/init.cpp:223 (bitcoind+0x0000004c27e2)
        [#4](/bitcoin-bitcoin/4/) AppInit(int, char**) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:185 (bitcoind+0x0000004bd41a)
        [#5](/bitcoin-bitcoin/5/) main /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:201 (bitcoind+0x0000004bd41a)
      Previous read of size 8 at 0x7f94042f9328 by thread T2 (mutexes: write M131465, write M131617):
        [#0](/bitcoin-bitcoin/0/) __normal_iterator /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/stl_iterator.h:741 (bitcoind+0x00000051b128)
        [#1](/bitcoin-bitcoin/1/) std::vector<CNode*, std::allocator<CNode*> >::end() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/stl_vector.h:566 (bitcoind+0x00000051b128)
        [#2](/bitcoin-bitcoin/2/) CConnman::GetExtraOutboundCount() /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/net.cpp:1648 (bitcoind+0x00000051b128)
        [#3](/bitcoin-bitcoin/3/) PeerLogicValidation::EvictExtraOutboundPeers(long) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/net_processing.cpp:3346 (bitcoind+0x00000055af44)
        [#4](/bitcoin-bitcoin/4/) PeerLogicValidation::CheckForStaleTipAndEvictPeers(Consensus::Params const&) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/net_processing.cpp:3408 (bitcoind+0x00000053cb1c)
        [#5](/bitcoin-bitcoin/5/) void std::_Mem_fn_base<void (PeerLogicValidation::*)(Consensus::Params const&), true>::operator()<Consensus::Params&, void>(PeerLogicValidation*, Consensus::Params&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:600 (bitcoind+0x00000058b607)
        [#6](/bitcoin-bitcoin/6/) void std::_Bind<std::_Mem_fn<void (PeerLogicValidation::*)(Consensus::Params const&)> (PeerLogicValidation*, Consensus::Params)>::__call<void, , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1073 (bitcoind+0x00000058b607)
        [#7](/bitcoin-bitcoin/7/) void std::_Bind<std::_Mem_fn<void (PeerLogicValidation::*)(Consensus::Params const&)> (PeerLogicValidation*, Consensus::Params)>::operator()<, void>() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1131 (bitcoind+0x00000058b607)
        [#8](/bitcoin-bitcoin/8/) std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void (PeerLogicValidation::*)(Consensus::Params const&)> (PeerLogicValidation*, Consensus::Params)> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1871 (bitcoind+0x00000058b607)
        [#9](/bitcoin-bitcoin/9/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:2267 (bitcoind+0x0000008070ff)
        [#10](/bitcoin-bitcoin/10/) Repeat(CScheduler*, std::function<void ()>, long) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/scheduler.cpp:121 (bitcoind+0x0000008070ff)
        [#11](/bitcoin-bitcoin/11/) void std::_Bind<void (*(CScheduler*, std::function<void ()>, long))(CScheduler*, std::function<void ()>, long)>::__call<void, , 0ul, 1ul, 2ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul, 2ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1073 (bitcoind+0x000000808406)
        [#12](/bitcoin-bitcoin/12/) void std::_Bind<void (*(CScheduler*, std::function<void ()>, long))(CScheduler*, std::function<void ()>, long)>::operator()<, void>() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1131 (bitcoind+0x000000808196)
        [#13](/bitcoin-bitcoin/13/) std::_Function_handler<void (), std::_Bind<void (*(CScheduler*, std::function<void ()>, long))(CScheduler*, std::function<void ()>, long)> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1871 (bitcoind+0x000000808196)
        [#14](/bitcoin-bitcoin/14/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:2267 (bitcoind+0x0000008066c5)
        [#15](/bitcoin-bitcoin/15/) CScheduler::serviceQueue() /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/scheduler.cpp:82 (bitcoind+0x0000008066c5)
        [#16](/bitcoin-bitcoin/16/) void std::_Mem_fn_base<void (CScheduler::*)(), true>::operator()<, void>(CScheduler*) const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:600 (bitcoind+0x000000500e77)
        [#17](/bitcoin-bitcoin/17/) void std::_Bind<std::_Mem_fn<void (CScheduler::*)()> (CScheduler*)>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1073 (bitcoind+0x000000500e77)
        [#18](/bitcoin-bitcoin/18/) void std::_Bind<std::_Mem_fn<void (CScheduler::*)()> (CScheduler*)>::operator()<, void>() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1131 (bitcoind+0x000000500e77)
        [#19](/bitcoin-bitcoin/19/) std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void (CScheduler::*)()> (CScheduler*)> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1871 (bitcoind+0x000000500e77)
        [#20](/bitcoin-bitcoin/20/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:2267 (bitcoind+0x0000004eae97)
        [#21](/bitcoin-bitcoin/21/) void TraceThread<std::function<void ()> >(char const*, std::function<void ()>) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./util/system.h:340 (bitcoind+0x0000004eae97)
        [#22](/bitcoin-bitcoin/22/) void std::_Bind<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)>::__call<void, , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1073 (bitcoind+0x00000050139c)
        [#23](/bitcoin-bitcoin/23/) void std::_Bind<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)>::operator()<, void>() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1131 (bitcoind+0x000000501305)
        [#24](/bitcoin-bitcoin/24/) boost::detail::thread_data<std::_Bind<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)> >::run() /usr/include/boost/thread/detail/thread.hpp:116 (bitcoind+0x000000501305)
        [#25](/bitcoin-bitcoin/25/) boost::this_thread::interruption_point() <null> (libboost_thread.so.1.58.0+0x0000000115d4)
      Location is heap block of size 328928 at 0x7f94042a9000 allocated by main thread:
        [#0](/bitcoin-bitcoin/0/) operator new(unsigned long) <null> (bitcoind+0x0000004ba2f3)
        [#1](/bitcoin-bitcoin/1/) AppInitMain(InitInterfaces&) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/init.cpp:1335 (bitcoind+0x0000004da9a3)
        [#2](/bitcoin-bitcoin/2/) AppInit(int, char**) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:171 (bitcoind+0x0000004bcc96)
        [#3](/bitcoin-bitcoin/3/) main /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:201 (bitcoind+0x0000004bcc96)
      Mutex M132887 (0x000000cd6550) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_trylock <null> (bitcoind+0x0000004501e0)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_trylock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0/bits/gthr-default.h:757 (bitcoind+0x0000004c17c2)
        [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_trylock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0/bits/gthr-default.h:816 (bitcoind+0x0000004c17c2)
        [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::try_lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/mutex:187 (bitcoind+0x0000004c17c2)
        [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::try_lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/mutex:499 (bitcoind+0x0000004c17c2)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::TryEnter(char const*, char const*, int) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./sync.h:138 (bitcoind+0x0000004c17c2)
        [#6](/bitcoin-bitcoin/6/) UniqueLock /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./sync.h:148 (bitcoind+0x0000004c17c2)
        [#7](/bitcoin-bitcoin/7/) Shutdown(InitInterfaces&) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/init.cpp:200 (bitcoind+0x0000004c2711)
        [#8](/bitcoin-bitcoin/8/) AppInit(int, char**) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:185 (bitcoind+0x0000004bd41a)
        [#9](/bitcoin-bitcoin/9/) main /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:201 (bitcoind+0x0000004bd41a)
      Mutex M131465 (0x000000cd6660) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x0000004516e0)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0/bits/gthr-default.h:748 (bitcoind+0x0000004dd10c)
        [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0/bits/gthr-default.h:810 (bitcoind+0x0000004dd10c)
        [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/mutex:176 (bitcoind+0x0000004dd10c)
        [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/mutex:485 (bitcoind+0x0000004dd10c)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::Enter(char const*, char const*, int) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./sync.h:129 (bitcoind+0x0000004dd10c)
        [#6](/bitcoin-bitcoin/6/) UniqueLock /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./sync.h:150 (bitcoind+0x0000004dd10c)
        [#7](/bitcoin-bitcoin/7/) AppInitMain(InitInterfaces&) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/init.cpp:1477 (bitcoind+0x0000004dd10c)
        [#8](/bitcoin-bitcoin/8/) AppInit(int, char**) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:171 (bitcoind+0x0000004bcc96)
        [#9](/bitcoin-bitcoin/9/) main /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:201 (bitcoind+0x0000004bcc96)
      Mutex M131617 (0x7f94042f9350) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0x0000004516e0)
        [#1](/bitcoin-bitcoin/1/) __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0/bits/gthr-default.h:748 (bitcoind+0x000000514ac3)
        [#2](/bitcoin-bitcoin/2/) __gthread_recursive_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0/bits/gthr-default.h:810 (bitcoind+0x000000514ac3)
        [#3](/bitcoin-bitcoin/3/) std::recursive_mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/mutex:176 (bitcoind+0x000000514ac3)
        [#4](/bitcoin-bitcoin/4/) std::unique_lock<std::recursive_mutex>::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/mutex:485 (bitcoind+0x000000514ac3)
        [#5](/bitcoin-bitcoin/5/) UniqueLock<AnnotatedMixin<std::recursive_mutex>, std::unique_lock<std::recursive_mutex> >::Enter(char const*, char const*, int) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./sync.h:129 (bitcoind+0x000000514ac3)
        [#6](/bitcoin-bitcoin/6/) UniqueLock /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./sync.h:150 (bitcoind+0x000000514ac3)
        [#7](/bitcoin-bitcoin/7/) CConnman::DisconnectNodes() /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/net.cpp:978 (bitcoind+0x000000514ac3)
        [#8](/bitcoin-bitcoin/8/) CConnman::ThreadSocketHandler() /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/net.cpp:1375 (bitcoind+0x000000518d67)
        [#9](/bitcoin-bitcoin/9/) void std::_Mem_fn_base<void (CConnman::*)(), true>::operator()<, void>(CConnman*) const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:600 (bitcoind+0x0000005349a7)
        [#10](/bitcoin-bitcoin/10/) void std::_Bind<std::_Mem_fn<void (CConnman::*)()> (CConnman*)>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1073 (bitcoind+0x0000005349a7)
        [#11](/bitcoin-bitcoin/11/) void std::_Bind<std::_Mem_fn<void (CConnman::*)()> (CConnman*)>::operator()<, void>() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1131 (bitcoind+0x0000005349a7)
        [#12](/bitcoin-bitcoin/12/) std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void (CConnman::*)()> (CConnman*)> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1871 (bitcoind+0x0000005349a7)
        [#13](/bitcoin-bitcoin/13/) std::function<void ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:2267 (bitcoind+0x0000004eae97)
        [#14](/bitcoin-bitcoin/14/) void TraceThread<std::function<void ()> >(char const*, std::function<void ()>) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/./util/system.h:340 (bitcoind+0x0000004eae97)
        [#15](/bitcoin-bitcoin/15/) void std::_Bind_simple<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1530 (bitcoind+0x000000534e82)
        [#16](/bitcoin-bitcoin/16/) std::_Bind_simple<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)>::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/functional:1520 (bitcoind+0x000000534e82)
        [#17](/bitcoin-bitcoin/17/) std::thread::_Impl<std::_Bind_simple<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)> >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/thread:115 (bitcoind+0x000000534e82)
        [#18](/bitcoin-bitcoin/18/) std::this_thread::__sleep_for(std::chrono::duration<long, std::ratio<1l, 1l> >, std::chrono::duration<long, std::ratio<1l, 1000000000l> >) <null> (libstdc++.so.6+0x0000000b8c7f)
      Thread T2 'bitcoin-schedul' (tid=28636, running) created by main thread at:
        [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0x00000043a5a6)
        [#1](/bitcoin-bitcoin/1/) boost::thread::start_thread_noexcept() <null> (libboost_thread.so.1.58.0+0x0000000102e8)
        [#2](/bitcoin-bitcoin/2/) thread<std::_Bind<void (*(const char *, std::function<void ()>))(const char *, std::function<void ()>)> &> /usr/include/boost/thread/detail/thread.hpp:266 (bitcoind+0x000000501102)
        [#3](/bitcoin-bitcoin/3/) boost::thread* boost::thread_group::create_thread<std::_Bind<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)> >(std::_Bind<void (*(char const*, std::function<void ()>))(char const*, std::function<void ()>)>) /usr/include/boost/thread/detail/thread_group.hpp:78 (bitcoind+0x0000004ead7c)
        [#4](/bitcoin-bitcoin/4/) AppInitMain(InitInterfaces&) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/init.cpp:1284 (bitcoind+0x0000004da47e)
        [#5](/bitcoin-bitcoin/5/) AppInit(int, char**) /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:171 (bitcoind+0x0000004bcc96)
        [#6](/bitcoin-bitcoin/6/) main /home/travis/build/bitcoin/bitcoin/build/bitcoin-x86_64-unknown-linux-gnu/src/bitcoind.cpp:201 (bitcoind+0x0000004bcc96)
    SUMMARY: ThreadSanitizer: data race /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/stl_vector.h:1439 in std::vector<CNode*, std::allocator<CNode*> >::_M_erase_at_end(CNode**)
    ==================
    ThreadSanitizer: reported 1 warnings
    
  21. deadalnix referenced this in commit 150e11f7ce on Apr 10, 2020
  22. ftrader referenced this in commit 6eea2b040b on Aug 17, 2020
  23. practicalswift deleted the branch on Apr 10, 2021
  24. LarryRuane referenced this in commit 0a095002da on Apr 29, 2021
  25. LarryRuane referenced this in commit 18d57eb33b on Jun 1, 2021
  26. PastaPastaPasta referenced this in commit 9b3147f672 on Jul 18, 2021
  27. PastaPastaPasta referenced this in commit f6f78e8df7 on Jul 18, 2021
  28. PastaPastaPasta referenced this in commit c078e143c6 on Jul 19, 2021
  29. PastaPastaPasta referenced this in commit 85a7177ac9 on Jul 19, 2021
  30. PastaPastaPasta referenced this in commit a7ad763bcb on Jul 20, 2021
  31. PastaPastaPasta referenced this in commit 6ebd283f0d on Jul 20, 2021
  32. gades referenced this in commit 7f17a762a4 on May 18, 2022
  33. DrahtBot locked this on Aug 18, 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-04-16 15:15 UTC

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