ThreadSanitizer: data race in feature_reindex.py #19715

issue fanquake opened this issue on August 14, 2020
  1. fanquake commented at 7:07 AM on August 14, 2020: member

    See in this Travis build.

    wallet_listtransactions.py                       | ✓ Passed  | 35 s
    wallet_zapwallettxes.py                          | ✓ Passed  | 17 s
    feature_reindex.py                               | ✖ Failed  | 7 s
    ALL                                              | ✖ Failed  | 1246 s (accumulated) 
    Runtime: 386 s
    ==================
    WARNING: ThreadSanitizer: data race (pid=27983)
      Read of size 8 at 0x7b0400000ec0 by thread T2 (mutexes: write M131664, write M134):
        [#0](/bitcoin-bitcoin/0/) std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>&&, std::__1::tuple<>&&) <null> (bitcoind+0x45e066)
        [#1](/bitcoin-bitcoin/1/) BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase&, char const*, bool) <null> (bitcoind+0x457667)
        [#2](/bitcoin-bitcoin/2/) CWallet::AddToWallet(std::__1::shared_ptr<CTransaction const>, CWalletTx::Confirmation const&, std::__1::function<bool (CWalletTx&, bool)> const&, bool) <null> (bitcoind+0x5315d2)
        [#3](/bitcoin-bitcoin/3/) CWallet::AddToWalletIfInvolvingMe(std::__1::shared_ptr<CTransaction const> const&, CWalletTx::Confirmation, bool) <null> (bitcoind+0x534024)
        [#4](/bitcoin-bitcoin/4/) CWallet::blockConnected(CBlock const&, int) <null> (bitcoind+0x5356f3)
        [#5](/bitcoin-bitcoin/5/) non-virtual thunk to CWallet::blockConnected(CBlock const&, int) <null> (bitcoind+0x53582a)
        [#6](/bitcoin-bitcoin/6/) interfaces::(anonymous namespace)::NotificationsProxy::BlockConnected(std::__1::shared_ptr<CBlock const> const&, CBlockIndex const*) <null> (bitcoind+0x1058d1)
        [#7](/bitcoin-bitcoin/7/) std::__1::__function::__func<CMainSignals::BlockConnected(std::__1::shared_ptr<CBlock const> const&, CBlockIndex const*)::$_9, std::__1::allocator<CMainSignals::BlockConnected(std::__1::shared_ptr<CBlock const> const&, CBlockIndex const*)::$_9>, void ()>::operator()() <null> (bitcoind+0x3d2a32)
        [#8](/bitcoin-bitcoin/8/) SingleThreadedSchedulerClient::ProcessQueue() <null> (bitcoind+0x630926)
        [#9](/bitcoin-bitcoin/9/) std::__1::__function::__func<std::__1::__bind<void (SingleThreadedSchedulerClient::*)(), SingleThreadedSchedulerClient*>, std::__1::allocator<std::__1::__bind<void (SingleThreadedSchedulerClient::*)(), SingleThreadedSchedulerClient*> >, void ()>::operator()() <null> (bitcoind+0x632846)
        [#10](/bitcoin-bitcoin/10/) CScheduler::serviceQueue() <null> (bitcoind+0x62f7e4)
        [#11](/bitcoin-bitcoin/11/) std::__1::__function::__func<AppInitMain(util::Ref const&, NodeContext&)::$_4, std::__1::allocator<AppInitMain(util::Ref const&, NodeContext&)::$_4>, void ()>::operator()() <null> (bitcoind+0x1263ae)
        [#12](/bitcoin-bitcoin/12/) void TraceThread<std::__1::function<void ()> >(char const*, std::__1::function<void ()>) <null> (bitcoind+0x12b0ca)
        [#13](/bitcoin-bitcoin/13/) boost::detail::thread_data<std::__1::__bind<void (*)(char const*, std::__1::function<void ()>), char const (&) [10], std::__1::function<void ()>&> >::run() <null> (bitcoind+0x1436ad)
        [#14](/bitcoin-bitcoin/14/) boost::(anonymous namespace)::thread_proxy(void*) <null> (bitcoind+0x7aed6e)
      Previous write of size 8 at 0x7b0400000ec0 by main thread (mutexes: write M131965):
        [#0](/bitcoin-bitcoin/0/) std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId> > >::remove(std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, void*>*>) <null> (bitcoind+0x45fe11)
        [#1](/bitcoin-bitcoin/1/) BerkeleyDatabase::Flush(bool) <null> (bitcoind+0x45bb8e)
        [#2](/bitcoin-bitcoin/2/) CWallet::Flush(bool) <null> (bitcoind+0x52df68)
        [#3](/bitcoin-bitcoin/3/) FlushWallets() <null> (bitcoind+0x469f81)
        [#4](/bitcoin-bitcoin/4/) interfaces::(anonymous namespace)::WalletClientImpl::flush() <null> (bitcoind+0x4398f1)
        [#5](/bitcoin-bitcoin/5/) Shutdown(NodeContext&) <null> (bitcoind+0x10775c)
        [#6](/bitcoin-bitcoin/6/) main <null> (bitcoind+0xfd800)
      Location is heap block of size 16 at 0x7b0400000ec0 allocated by main thread:
        [#0](/bitcoin-bitcoin/0/) operator new(unsigned long) <null> (bitcoind+0xfa3db)
        [#1](/bitcoin-bitcoin/1/) std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId> > >::__rehash(unsigned long) <null> (bitcoind+0x45e765)
        [#2](/bitcoin-bitcoin/2/) std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId> > >::rehash(unsigned long) <null> (bitcoind+0x45e5a8)
        [#3](/bitcoin-bitcoin/3/) std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>&&, std::__1::tuple<>&&) <null> (bitcoind+0x45e39c)
        [#4](/bitcoin-bitcoin/4/) BerkeleyBatch::BerkeleyBatch(BerkeleyDatabase&, char const*, bool) <null> (bitcoind+0x457667)
        [#5](/bitcoin-bitcoin/5/) CWallet::LoadWallet(bool&) <null> (bitcoind+0x54bc98)
        [#6](/bitcoin-bitcoin/6/) CWallet::CreateWalletFromFile(interfaces::Chain&, WalletLocation const&, bilingual_str&, std::__1::vector<bilingual_str, std::__1::allocator<bilingual_str> >&, unsigned long) <null> (bitcoind+0x522305)
        [#7](/bitcoin-bitcoin/7/) LoadWallets(interfaces::Chain&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) <null> (bitcoind+0x469584)
        [#8](/bitcoin-bitcoin/8/) interfaces::(anonymous namespace)::WalletClientImpl::load() <null> (bitcoind+0x439835)
        [#9](/bitcoin-bitcoin/9/) AppInitMain(util::Ref const&, NodeContext&) <null> (bitcoind+0x11f1ae)
        [#10](/bitcoin-bitcoin/10/) main <null> (bitcoind+0xfd32c)
      Mutex M131664 (0x7b580000bb30) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_init <null> (bitcoind+0x6ea4d)
        [#1](/bitcoin-bitcoin/1/) std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x83583)
        [#2](/bitcoin-bitcoin/2/) CWallet::CreateWalletFromFile(interfaces::Chain&, WalletLocation const&, bilingual_str&, std::__1::vector<bilingual_str, std::__1::allocator<bilingual_str> >&, unsigned long) <null> (bitcoind+0x52224c)
        [#3](/bitcoin-bitcoin/3/) LoadWallets(interfaces::Chain&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) <null> (bitcoind+0x469584)
        [#4](/bitcoin-bitcoin/4/) interfaces::(anonymous namespace)::WalletClientImpl::load() <null> (bitcoind+0x439835)
        [#5](/bitcoin-bitcoin/5/) AppInitMain(util::Ref const&, NodeContext&) <null> (bitcoind+0x11f1ae)
        [#6](/bitcoin-bitcoin/6/) main <null> (bitcoind+0xfd32c)
      Mutex M134 (0x55b5331b1640) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_init <null> (bitcoind+0x6ea4d)
        [#1](/bitcoin-bitcoin/1/) std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x83583)
        [#2](/bitcoin-bitcoin/2/) __libc_csu_init <null> (bitcoind+0x957e4c)
      Mutex M131965 (0x55b5331ad0a8) created at:
        [#0](/bitcoin-bitcoin/0/) pthread_mutex_init <null> (bitcoind+0x6ea4d)
        [#1](/bitcoin-bitcoin/1/) std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x83583)
        [#2](/bitcoin-bitcoin/2/) main <null> (bitcoind+0xfd800)
      Thread T2 'b-scheduler' (tid=27986, running) created by main thread at:
        [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0x6d4cb)
        [#1](/bitcoin-bitcoin/1/) boost::thread::start_thread_noexcept() <null> (bitcoind+0x7aec6d)
        [#2](/bitcoin-bitcoin/2/) boost::thread::thread<std::__1::__bind<void (*)(char const*, std::__1::function<void ()>), char const (&) [10], std::__1::function<void ()>&>&>(std::__1::__bind<void (*)(char const*, std::__1::function<void ()>), char const (&) [10], std::__1::function<void ()>&>&) <null> (bitcoind+0x14330b)
        [#3](/bitcoin-bitcoin/3/) boost::thread* boost::thread_group::create_thread<std::__1::__bind<void (*)(char const*, std::__1::function<void ()>), char const (&) [10], std::__1::function<void ()>&> >(std::__1::__bind<void (*)(char const*, std::__1::function<void ()>), char const (&) [10], std::__1::function<void ()>&>) <null> (bitcoind+0x12ae5e)
        [#4](/bitcoin-bitcoin/4/) AppInitMain(util::Ref const&, NodeContext&) <null> (bitcoind+0x1199bf)
        [#5](/bitcoin-bitcoin/5/) main <null> (bitcoind+0xfd32c)
    SUMMARY: ThreadSanitizer: data race (/home/travis/build/bitcoin/bitcoin/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind+0x45e066) in std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WalletDatabaseFileId>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__ha
    
    ==================
    
  2. MarcoFalke commented at 7:23 AM on August 14, 2020: member

    race:BerkeleyBatch is already in the suppression, not sure what can be done here

  3. fanquake commented at 7:24 AM on August 14, 2020: member

    @MarcoFalke It's possible that the Travis run was from before you added the suppression. Just wanted to note. I'll reboot the build.

  4. MarcoFalke commented at 7:35 AM on August 14, 2020: member

    Ah ok, it was two months ago. Closing for now. Let me know if this happens again on current master

  5. MarcoFalke closed this on Aug 14, 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 21:14 UTC

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