TSAN race after merge of #20090 #20163

issue fanquake opened this issue on October 16, 2020
  1. fanquake commented at 1:41 AM on October 16, 2020: member

    Cirrus Job

    WARNING: ThreadSanitizer: data race (pid=114132)
      Read of size 8 at 0x7ba0000000b0 by thread T5 (mutexes: write M131488):
        [#0](/bitcoin-bitcoin/0/) epoll_ctl <null> (bitcoind+0x8e332)
        [#1](/bitcoin-bitcoin/1/) epoll_apply_one_change <null> (bitcoind+0x9822be)
        [#2](/bitcoin-bitcoin/2/) decltype(std::__1::forward<bool (*)(event_base*)>(fp)(std::__1::forward<event_base*>(fp0))) std::__1::__invoke<bool (*)(event_base*), event_base*>(bool (*&&)(event_base*), event_base*&&) /usr/lib/llvm-10/bin/../include/c++/v1/type_traits:3539:1 (bitcoind+0x48e23c)
        [#3](/bitcoin-bitcoin/3/) void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, bool (*)(event_base*), event_base*, 2ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, bool (*)(event_base*), event_base*>&, std::__1::__tuple_indices<2ul>) /usr/lib/llvm-10/bin/../include/c++/v1/thread:273:5 (bitcoind+0x48e23c)
        [#4](/bitcoin-bitcoin/4/) void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, bool (*)(event_base*), event_base*> >(void*) /usr/lib/llvm-10/bin/../include/c++/v1/thread:284:5 (bitcoind+0x48e23c)
      Previous write of size 8 at 0x7ba0000000b0 by thread T4 (mutexes: write M259):
        [#0](/bitcoin-bitcoin/0/) open <null> (bitcoind+0x8bc30)
        [#1](/bitcoin-bitcoin/1/) __os_openhandle <null> (bitcoind+0x8dcc48)
        [#2](/bitcoin-bitcoin/2/) MaybeCompactWalletDB() /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/wallet/walletdb.cpp:954:21 (bitcoind+0x6255d8)
        [#3](/bitcoin-bitcoin/3/) decltype(std::__1::forward<void (*&)()>(fp)()) std::__1::__invoke<void (*&)()>(void (*&)()) /usr/lib/llvm-10/bin/../include/c++/v1/type_traits:3539:1 (bitcoind+0x1520ef)
        [#4](/bitcoin-bitcoin/4/) void std::__1::__invoke_void_return_wrapper<void>::__call<void (*&)()>(void (*&)()) /usr/lib/llvm-10/bin/../include/c++/v1/__functional_base:348:9 (bitcoind+0x1520ef)
        [#5](/bitcoin-bitcoin/5/) std::__1::__function::__alloc_func<void (*)(), std::__1::allocator<void (*)()>, void ()>::operator()() /usr/lib/llvm-10/bin/../include/c++/v1/functional:1540:16 (bitcoind+0x1520ef)
        [#6](/bitcoin-bitcoin/6/) std::__1::__function::__func<void (*)(), std::__1::allocator<void (*)()>, void ()>::operator()() /usr/lib/llvm-10/bin/../include/c++/v1/functional:1714:12 (bitcoind+0x1520ef)
        [#7](/bitcoin-bitcoin/7/) std::__1::__function::__value_func<void ()>::operator()() const /usr/lib/llvm-10/bin/../include/c++/v1/functional:1867:16 (bitcoind+0x6f16c1)
        [#8](/bitcoin-bitcoin/8/) std::__1::function<void ()>::operator()() const /usr/lib/llvm-10/bin/../include/c++/v1/functional:2473:12 (bitcoind+0x6f16c1)
        [#9](/bitcoin-bitcoin/9/) Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/scheduler.cpp:104:5 (bitcoind+0x6f16c1)
        [#10](/bitcoin-bitcoin/10/) Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1::operator()() const /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/scheduler.cpp:105:33 (bitcoind+0x6f1edb)
        [#11](/bitcoin-bitcoin/11/) decltype(std::__1::forward<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1&>(fp)()) std::__1::__invoke<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1&>(Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1&) /usr/lib/llvm-10/bin/../include/c++/v1/type_traits:3539:1 (bitcoind+0x6f1edb)
        [#12](/bitcoin-bitcoin/12/) void std::__1::__invoke_void_return_wrapper<void>::__call<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1&>(Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1&) /usr/lib/llvm-10/bin/../include/c++/v1/__functional_base:348:9 (bitcoind+0x6f1edb)
        [#13](/bitcoin-bitcoin/13/) std::__1::__function::__alloc_func<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1, std::__1::allocator<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1>, void ()>::operator()() /usr/lib/llvm-10/bin/../include/c++/v1/functional:1540:16 (bitcoind+0x6f1edb)
        [#14](/bitcoin-bitcoin/14/) std::__1::__function::__func<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1, std::__1::allocator<Repeat(CScheduler&, std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::$_1>, void ()>::operator()() /usr/lib/llvm-10/bin/../include/c++/v1/functional:1714:12 (bitcoind+0x6f1edb)
        [#15](/bitcoin-bitcoin/15/) std::__1::__function::__value_func<void ()>::operator()() const /usr/lib/llvm-10/bin/../include/c++/v1/functional:1867:16 (bitcoind+0x6ef905)
        [#16](/bitcoin-bitcoin/16/) std::__1::function<void ()>::operator()() const /usr/lib/llvm-10/bin/../include/c++/v1/functional:2473:12 (bitcoind+0x6ef905)
        [#17](/bitcoin-bitcoin/17/) CScheduler::serviceQueue() /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/scheduler.cpp:60:17 (bitcoind+0x6ef905)
        [#18](/bitcoin-bitcoin/18/) AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6::operator()() const::'lambda'()::operator()() const /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:1343:84 (bitcoind+0x13f4a1)
        [#19](/bitcoin-bitcoin/19/) void TraceThread<AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6::operator()() const::'lambda'()>(char const*, AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6::operator()() const::'lambda'()) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/./util/system.h:438:9 (bitcoind+0x13f4a1)
        [#20](/bitcoin-bitcoin/20/) AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6::operator()() const /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:1343:37 (bitcoind+0x13f4a1)
        [#21](/bitcoin-bitcoin/21/) boost::detail::thread_data<AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6>::run() /tmp/cirrus-ci-build/depends/x86_64-pc-linux-gnu/share/../include/boost/thread/detail/thread.hpp:120:17 (bitcoind+0x13f4a1)
        [#22](/bitcoin-bitcoin/22/) boost::(anonymous namespace)::thread_proxy(void*) <null> (bitcoind+0x879cae)
      Location is file descriptor 11 created by main thread at:
        [failed to restore the stack]
      Mutex M131488 (0x7b0c000061e0) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_init <null> (bitcoind+0x89abd)
        [#1](/bitcoin-bitcoin/1/) evthread_posix_lock_alloc <null> (bitcoind+0x96a65f)
        [#2](/bitcoin-bitcoin/2/) AppInitServers(util::Ref const&, NodeContext&) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:790:10 (bitcoind+0x130aee)
        [#3](/bitcoin-bitcoin/3/) AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:1370:14 (bitcoind+0x130aee)
        [#4](/bitcoin-bitcoin/4/) AppInit(int, char**) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind.cpp:142:43 (bitcoind+0x1183e8)
        [#5](/bitcoin-bitcoin/5/) main /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind.cpp:172:13 (bitcoind+0x1183e8)
      Mutex M259 (0x55b959ade508) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_init <null> (bitcoind+0x89abd)
        [#1](/bitcoin-bitcoin/1/) std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x83583)
        [#2](/bitcoin-bitcoin/2/) __libc_csu_init <null> (bitcoind+0xb6de0c)
      Thread T5 'b-http' (tid=114143, running) created by main thread at:
        [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0x8853b)
        [#1](/bitcoin-bitcoin/1/) std::__1::__libcpp_thread_create(unsigned long*, void* (*)(void*), void*) /usr/lib/llvm-10/bin/../include/c++/v1/__threading_support:394:10 (bitcoind+0x48a5eb)
        [#2](/bitcoin-bitcoin/2/) std::__1::thread::thread<bool (&)(event_base*), event_base*&, void>(bool (&)(event_base*), event_base*&) /usr/lib/llvm-10/bin/../include/c++/v1/thread:300:16 (bitcoind+0x48a5eb)
        [#3](/bitcoin-bitcoin/3/) StartHTTPServer() /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/httpserver.cpp:432:21 (bitcoind+0x486b80)
        [#4](/bitcoin-bitcoin/4/) AppInitServers(util::Ref const&, NodeContext&) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:797:5 (bitcoind+0x130be5)
        [#5](/bitcoin-bitcoin/5/) AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:1370:14 (bitcoind+0x130be5)
        [#6](/bitcoin-bitcoin/6/) AppInit(int, char**) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind.cpp:142:43 (bitcoind+0x1183e8)
        [#7](/bitcoin-bitcoin/7/) main /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind.cpp:172:13 (bitcoind+0x1183e8)
      Thread T4 'b-scheduler' (tid=114137, running) created by main thread at:
        [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0x8853b)
        [#1](/bitcoin-bitcoin/1/) boost::thread::start_thread_noexcept() <null> (bitcoind+0x879bad)
        [#2](/bitcoin-bitcoin/2/) boost::thread::thread<AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6&>(AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6&) /tmp/cirrus-ci-build/depends/x86_64-pc-linux-gnu/share/../include/boost/thread/detail/thread.hpp:269:13 (bitcoind+0x130612)
        [#3](/bitcoin-bitcoin/3/) boost::thread* boost::thread_group::create_thread<AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6>(AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_6) /tmp/cirrus-ci-build/depends/x86_64-pc-linux-gnu/share/../include/boost/thread/detail/thread_group.hpp:79:60 (bitcoind+0x130612)
        [#4](/bitcoin-bitcoin/4/) AppInitMain(util::Ref const&, NodeContext&, interfaces::BlockAndHeaderTipInfo*) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/init.cpp:1343:17 (bitcoind+0x130612)
        [#5](/bitcoin-bitcoin/5/) AppInit(int, char**) /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind.cpp:142:43 (bitcoind+0x1183e8)
        [#6](/bitcoin-bitcoin/6/) main /tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind.cpp:172:13 (bitcoind+0x1183e8)
    SUMMARY: ThreadSanitizer: data race (/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind+0x8e332) in epoll_ctl
    ==================
    
  2. fanquake added the label Bug on Oct 16, 2020
  3. hebasto commented at 5:28 PM on December 22, 2020: member

    The mentioned race warning is temporarily suppressed in #20218 and #20745.

  4. MarcoFalke commented at 5:33 PM on December 22, 2020: member

    Closing for now. Anyone is welcome to investigate the suppressions. Ideally there'd be none, but we don't need to keep an open issue for every single one of them.

  5. MarcoFalke closed this on Dec 22, 2020

  6. 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-04-13 18:14 UTC

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