The removed suppression seems no needed.
I cannot point the exact commit/PR which makes this change possible.
race:epoll_ctl
TSan suppression
#26759
The removed suppression seems no needed.
I cannot point the exact commit/PR which makes this change possible.
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
See the guideline for information on the review process. A summary of reviews will appear here.
Yeah, could have been fixed when switching the clang version from
to
Yeah, could have been fixed when switching the clang version from
to
FWIW, I’ve checked the TSan task with the focal image before submitting this PR. There were no issues. Perhaps a fix was backported to focal’s clang-10.
🐙 This pull request conflicts with the target branch and needs rebase.
Perhaps a fix was backported to focal’s clang-10.
The last change to the Focal LLVM 10 toolchain package was prior to this suppression being added: https://changelogs.ubuntu.com/changelogs/pool/main/l/llvm-toolchain-10/llvm-toolchain-10_10.0.0-4ubuntu1/changelog.
https://cirrus-ci.com/task/6614284264800256?logs=ci#L3512
0interface_bitcoin_cli.py --legacy-wallet | ✖ Failed | 19 s
1ALL | ✖ Failed | 3147 s (accumulated)
2Runtime: 346 s
3==================
4WARNING: ThreadSanitizer: data race (pid=37922)
5 Write of size 8 at 0x7ba000000150 by thread T26 (mutexes: write M132180):
6 [#0](/bitcoin-bitcoin/0/) closedir <null> (bitcoind+0xd9e28)
7 [#1](/bitcoin-bitcoin/1/) leveldb::(anonymous namespace)::PosixEnv::GetChildren(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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> > > >*) src/leveldb/util/env_posix.cc:599:5 (bitcoind+0xa3f916)
8 [#2](/bitcoin-bitcoin/2/) leveldb::DBImpl::DeleteObsoleteFiles() src/leveldb/db/db_impl.cc:237:9 (bitcoind+0xa090a5)
9 [#3](/bitcoin-bitcoin/3/) leveldb::DBImpl::BackgroundCompaction() src/leveldb/db/db_impl.cc:752:5 (bitcoind+0xa0ce5d)
10 [#4](/bitcoin-bitcoin/4/) leveldb::DBImpl::BackgroundCall() src/leveldb/db/db_impl.cc:687:5 (bitcoind+0xa0c7bf)
11 [#5](/bitcoin-bitcoin/5/) leveldb::DBImpl::BGWork(void*) src/leveldb/db/db_impl.cc:676:34 (bitcoind+0xa0c6fb)
12 [#6](/bitcoin-bitcoin/6/) leveldb::(anonymous namespace)::PosixEnv::BackgroundThreadMain() src/leveldb/util/env_posix.cc:830:5 (bitcoind+0xa438b3)
13 [#7](/bitcoin-bitcoin/7/) leveldb::(anonymous namespace)::PosixEnv::BackgroundThreadEntryPoint(leveldb::(anonymous namespace)::PosixEnv*) src/leveldb/util/env_posix.cc:736:10 (bitcoind+0xa438b3)
14 [#8](/bitcoin-bitcoin/8/) decltype(static_cast<void (*>(fp)(static_cast<leveldb::(anonymous namespace)::PosixEnv*>(fp0))) std::__1::__invoke<void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*>(void (*&&)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0xa43ab0)
15 [#9](/bitcoin-bitcoin/9/) void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*, 2ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*>&, std::__1::__tuple_indices<2ul>) /usr/lib/llvm-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0xa43ab0)
16 [#10](/bitcoin-bitcoin/10/) void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*> >(void*) /usr/lib/llvm-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0xa43ab0)
17 Previous read of size 8 at 0x7ba000000150 by thread T17 (mutexes: write M131565):
18 [#0](/bitcoin-bitcoin/0/) epoll_ctl <null> (bitcoind+0xda1a5)
19 [#1](/bitcoin-bitcoin/1/) epoll_apply_one_change epoll.c (bitcoind+0xb76c43)
20 [#2](/bitcoin-bitcoin/2/) decltype(static_cast<bool (*>(fp)(static_cast<event_base*>(fp0))) std::__1::__invoke<bool (*)(event_base*), event_base*>(bool (*&&)(event_base*), event_base*&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x582500)
21 [#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-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0x582500)
22 [#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-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0x582500)
23 Location is file descriptor 21 created by main thread at:
24 [failed to restore the stack]
25 Mutex M132180 (0x7b580000c0c0) created at:
26 [#0](/bitcoin-bitcoin/0/) pthread_mutex_lock <null> (bitcoind+0xf1638)
27 [#1](/bitcoin-bitcoin/1/) std::__1::mutex::lock() <null> (libc++.so.1+0x49f35)
28 [#2](/bitcoin-bitcoin/2/) CDBWrapper::CDBWrapper(fs::path const&, unsigned long, bool, bool, bool) src/dbwrapper.cpp:156:30 (bitcoind+0x55725f)
29 [#3](/bitcoin-bitcoin/3/) std::__1::__unique_if<CDBWrapper>::__unique_single std::__1::make_unique<CDBWrapper, fs::path&, unsigned long&, bool&, bool, bool>(fs::path&, unsigned long&, bool&, bool&&, bool&&) /usr/lib/llvm-13/bin/../include/c++/v1/__memory/unique_ptr.h:728:32 (bitcoind+0x474f0e)
30 [#4](/bitcoin-bitcoin/4/) CCoinsViewDB::ResizeCache(unsigned long) src/txdb.cpp:86:16 (bitcoind+0x474f0e)
31 [#5](/bitcoin-bitcoin/5/) Chainstate::ResizeCoinsCaches(unsigned long, unsigned long) src/validation.cpp:4761:15 (bitcoind+0x4e095c)
32 [#6](/bitcoin-bitcoin/6/) ChainstateManager::MaybeRebalanceCaches() src/validation.cpp:5223:27 (bitcoind+0x4e4957)
33 [#7](/bitcoin-bitcoin/7/) node::LoadChainstate(ChainstateManager&, node::CacheSizes const&, node::ChainstateLoadOptions const&) src/node/chainstate.cpp:168:14 (bitcoind+0x265475)
34 [#8](/bitcoin-bitcoin/8/) AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_4::operator()() const src/init.cpp:1501:61 (bitcoind+0x16ad1b)
35 [#9](/bitcoin-bitcoin/9/) auto AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_3::operator()<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_4>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_4&&) const src/init.cpp:1495:24 (bitcoind+0x16ad1b)
36 [#10](/bitcoin-bitcoin/10/) AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1501:32 (bitcoind+0x163fa0)
37 [#11](/bitcoin-bitcoin/11/) AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:234:43 (bitcoind+0x14ade9)
38 [#12](/bitcoin-bitcoin/12/) main src/bitcoind.cpp:278:13 (bitcoind+0x14ade9)
39 Mutex M131565 (0x7b0c0001c860) created at:
40 [#0](/bitcoin-bitcoin/0/) pthread_mutex_init <null> (bitcoind+0xd5acf)
41 [#1](/bitcoin-bitcoin/1/) evthread_posix_lock_alloc evthread_pthread.c (bitcoind+0xb5ea5f)
42 [#2](/bitcoin-bitcoin/2/) AppInitServers(node::NodeContext&) src/init.cpp:649:10 (bitcoind+0x169a4c)
43 [#3](/bitcoin-bitcoin/3/) AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1186:14 (bitcoind+0x161035)
44 [#4](/bitcoin-bitcoin/4/) AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:234:43 (bitcoind+0x14ade9)
45 [#5](/bitcoin-bitcoin/5/) main src/bitcoind.cpp:278:13 (bitcoind+0x14ade9)
46 Thread T26 (tid=38391, running) created by thread T18 at:
47 [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0xd435d)
48 [#1](/bitcoin-bitcoin/1/) std::__1::__libcpp_thread_create(unsigned long*, void* (*)(void*), void*) /usr/lib/llvm-13/bin/../include/c++/v1/__threading_support:443:10 (bitcoind+0xa40653)
49 [#2](/bitcoin-bitcoin/2/) std::__1::thread::thread<void (&)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*, void>(void (&)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*&&) /usr/lib/llvm-13/bin/../include/c++/v1/thread:307:16 (bitcoind+0xa40653)
50 [#3](/bitcoin-bitcoin/3/) leveldb::(anonymous namespace)::PosixEnv::Schedule(void (*)(void*), void*) src/leveldb/util/env_posix.cc:802:17 (bitcoind+0xa40653)
51 [#4](/bitcoin-bitcoin/4/) leveldb::DBImpl::MaybeScheduleCompaction() src/leveldb/db/db_impl.cc:671:11 (bitcoind+0xa0fd22)
52 [#5](/bitcoin-bitcoin/5/) leveldb::DBImpl::Get(leveldb::ReadOptions const&, leveldb::Slice const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) src/leveldb/db/db_impl.cc:1150:5 (bitcoind+0xa0fd22)
53 [#6](/bitcoin-bitcoin/6/) bool CDBWrapper::Read<(anonymous namespace)::CoinEntry, Coin>((anonymous namespace)::CoinEntry const&, Coin&) const src/./dbwrapper.h:256:39 (bitcoind+0x4750e6)
54 [#7](/bitcoin-bitcoin/7/) CCoinsViewDB::GetCoin(COutPoint const&, Coin&) const src/txdb.cpp:92:18 (bitcoind+0x4750e6)
55 [#8](/bitcoin-bitcoin/8/) CCoinsViewBacked::GetCoin(COutPoint const&, Coin&) const src/coins.cpp:26:92 (bitcoind+0x8306a4)
56 [#9](/bitcoin-bitcoin/9/) CCoinsViewErrorCatcher::GetCoin(COutPoint const&, Coin&) const src/coins.cpp:297:34 (bitcoind+0x8306a4)
57 [#10](/bitcoin-bitcoin/10/) CCoinsViewCache::FetchCoin(COutPoint const&) const src/coins.cpp:46:16 (bitcoind+0x82dda3)
58 [#11](/bitcoin-bitcoin/11/) CCoinsViewCache::GetCoin(COutPoint const&, Coin&) const src/coins.cpp:59:36 (bitcoind+0x82def0)
59 [#12](/bitcoin-bitcoin/12/) CCoinsViewCache::FetchCoin(COutPoint const&) const src/coins.cpp:46:16 (bitcoind+0x82dda3)
60 [#13](/bitcoin-bitcoin/13/) CCoinsViewCache::HaveCoin(COutPoint const&) const src/coins.cpp:160:36 (bitcoind+0x82f452)
61 [#14](/bitcoin-bitcoin/14/) Chainstate::ConnectBlock(CBlock const&, BlockValidationState&, CBlockIndex*, CCoinsViewCache&, bool) src/validation.cpp:2148:26 (bitcoind+0x4c0e44)
62 [#15](/bitcoin-bitcoin/15/) TestBlockValidity(BlockValidationState&, CChainParams const&, Chainstate&, CBlock const&, CBlockIndex*, std::__1::function<std::__1::chrono::time_point<NodeClock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l> > > ()> const&, bool, bool) src/validation.cpp:3957:21 (bitcoind+0x4d86b9)
63 [#16](/bitcoin-bitcoin/16/) node::BlockAssembler::CreateNewBlock(CScript const&) src/node/miner.cpp:173:10 (bitcoind+0x5b3b9b)
64 [#17](/bitcoin-bitcoin/17/) generateBlocks(ChainstateManager&, CTxMemPool const&, CScript const&, int, unsigned long) src/rpc/mining.cpp:147:110 (bitcoind+0x398b1d)
65 [#18](/bitcoin-bitcoin/18/) generatetoaddress()::$_3::operator()(RPCHelpMan const&, JSONRPCRequest const&) const src/rpc/mining.cpp:280:12 (bitcoind+0x39885d)
66 [#19](/bitcoin-bitcoin/19/) decltype(static_cast<generatetoaddress()::$_3&>(fp)(static_cast<RPCHelpMan const&>(fp0), static_cast<JSONRPCRequest const&>(fp0))) std::__1::__invoke<generatetoaddress()::$_3&, RPCHelpMan const&, JSONRPCRequest const&>(generatetoaddress()::$_3&, RPCHelpMan const&, JSONRPCRequest const&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x39885d)
67 [#20](/bitcoin-bitcoin/20/) UniValue std::__1::__invoke_void_return_wrapper<UniValue, false>::__call<generatetoaddress()::$_3&, RPCHelpMan const&, JSONRPCRequest const&>(generatetoaddress()::$_3&, RPCHelpMan const&, JSONRPCRequest const&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:30:16 (bitcoind+0x39885d)
68 [#21](/bitcoin-bitcoin/21/) std::__1::__function::__alloc_func<generatetoaddress()::$_3, std::__1::allocator<generatetoaddress()::$_3>, UniValue (RPCHelpMan const&, JSONRPCRequest const&)>::operator()(RPCHelpMan const&, JSONRPCRequest const&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x39885d)
69 [#22](/bitcoin-bitcoin/22/) std::__1::__function::__func<generatetoaddress()::$_3, std::__1::allocator<generatetoaddress()::$_3>, UniValue (RPCHelpMan const&, JSONRPCRequest const&)>::operator()(RPCHelpMan const&, JSONRPCRequest const&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x39885d)
70 [#23](/bitcoin-bitcoin/23/) std::__1::__function::__value_func<UniValue (RPCHelpMan const&, JSONRPCRequest const&)>::operator()(RPCHelpMan const&, JSONRPCRequest const&) const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x8aca4f)
71 [#24](/bitcoin-bitcoin/24/) std::__1::function<UniValue (RPCHelpMan const&, JSONRPCRequest const&)>::operator()(RPCHelpMan const&, JSONRPCRequest const&) const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x8aca4f)
72 [#25](/bitcoin-bitcoin/25/) RPCHelpMan::HandleRequest(JSONRPCRequest const&) const src/rpc/util.cpp:582:26 (bitcoind+0x8aca4f)
73 [#26](/bitcoin-bitcoin/26/) CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)::operator()(JSONRPCRequest const&, UniValue&, bool) const src/./rpc/server.h:109:91 (bitcoind+0x34b017)
74 [#27](/bitcoin-bitcoin/27/) decltype(static_cast<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)&>(fp)(static_cast<JSONRPCRequest const&>(fp0), static_cast<UniValue&>(fp0), static_cast<bool>(fp0))) std::__1::__invoke<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)&, JSONRPCRequest const&, UniValue&, bool>(CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)&, JSONRPCRequest const&, UniValue&, bool&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x34b017)
75 [#28](/bitcoin-bitcoin/28/) bool std::__1::__invoke_void_return_wrapper<bool, false>::__call<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)&, JSONRPCRequest const&, UniValue&, bool>(CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)&, JSONRPCRequest const&, UniValue&, bool&&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:30:16 (bitcoind+0x34b017)
76 [#29](/bitcoin-bitcoin/29/) std::__1::__function::__alloc_func<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool), std::__1::allocator<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)>, bool (JSONRPCRequest const&, UniValue&, bool)>::operator()(JSONRPCRequest const&, UniValue&, bool&&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x34b017)
77 [#30](/bitcoin-bitcoin/30/) std::__1::__function::__func<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool), std::__1::allocator<CRPCCommand::CRPCCommand(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, RPCHelpMan (*)())::'lambda'(JSONRPCRequest const&, UniValue&, bool)>, bool (JSONRPCRequest const&, UniValue&, bool)>::operator()(JSONRPCRequest const&, UniValue&, bool&&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x34b017)
78 [#31](/bitcoin-bitcoin/31/) std::__1::__function::__value_func<bool (JSONRPCRequest const&, UniValue&, bool)>::operator()(JSONRPCRequest const&, UniValue&, bool&&) const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x43e9ef)
79 [#32](/bitcoin-bitcoin/32/) std::__1::function<bool (JSONRPCRequest const&, UniValue&, bool)>::operator()(JSONRPCRequest const&, UniValue&, bool) const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x43e9ef)
80 [#33](/bitcoin-bitcoin/33/) ExecuteCommand(CRPCCommand const&, JSONRPCRequest const&, UniValue&, bool) src/rpc/server.cpp:504:20 (bitcoind+0x43e9ef)
81 [#34](/bitcoin-bitcoin/34/) ExecuteCommands(std::__1::vector<CRPCCommand const*, std::__1::allocator<CRPCCommand const*> > const&, JSONRPCRequest const&, UniValue&) src/rpc/server.cpp:469:13 (bitcoind+0x43e9ef)
82 [#35](/bitcoin-bitcoin/35/) CRPCTable::execute(JSONRPCRequest const&) const src/rpc/server.cpp:489:13 (bitcoind+0x43e660)
83 [#36](/bitcoin-bitcoin/36/) HTTPReq_JSONRPC(std::__1::any const&, HTTPRequest*) src/httprpc.cpp:201:40 (bitcoind+0x570b16)
84 [#37](/bitcoin-bitcoin/37/) StartHTTPRPC(std::__1::any const&)::$_0::operator()(HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const src/httprpc.cpp:300:80 (bitcoind+0x570b16)
85 [#38](/bitcoin-bitcoin/38/) decltype(static_cast<StartHTTPRPC(std::__1::any const&)::$_0&>(fp)(static_cast<HTTPRequest*>(fp0), static_cast<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(fp0))) std::__1::__invoke<StartHTTPRPC(std::__1::any const&)::$_0&, HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(StartHTTPRPC(std::__1::any const&)::$_0&, HTTPRequest*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x570b16)
86 [#39](/bitcoin-bitcoin/39/) bool std::__1::__invoke_void_return_wrapper<bool, false>::__call<StartHTTPRPC(std::__1::any const&)::$_0&, HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(StartHTTPRPC(std::__1::any const&)::$_0&, HTTPRequest*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:30:16 (bitcoind+0x570b16)
87 [#40](/bitcoin-bitcoin/40/) std::__1::__function::__alloc_func<StartHTTPRPC(std::__1::any const&)::$_0, std::__1::allocator<StartHTTPRPC(std::__1::any const&)::$_0>, bool (HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>::operator()(HTTPRequest*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x570b16)
88 [#41](/bitcoin-bitcoin/41/) std::__1::__function::__func<StartHTTPRPC(std::__1::any const&)::$_0, std::__1::allocator<StartHTTPRPC(std::__1::any const&)::$_0>, bool (HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>::operator()(HTTPRequest*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x570b16)
89 [#42](/bitcoin-bitcoin/42/) std::__1::__function::__value_func<bool (HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>::operator()(HTTPRequest*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x57f8b0)
90 [#43](/bitcoin-bitcoin/43/) std::__1::function<bool (HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>::operator()(HTTPRequest*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x57f8b0)
91 [#44](/bitcoin-bitcoin/44/) HTTPWorkItem::operator()() src/httpserver.cpp:56:9 (bitcoind+0x57f8b0)
92 [#45](/bitcoin-bitcoin/45/) WorkQueue<HTTPClosure>::Run() src/httpserver.cpp:111:13 (bitcoind+0x5820f3)
93 [#46](/bitcoin-bitcoin/46/) HTTPWorkQueueRun(WorkQueue<HTTPClosure>*, int) src/httpserver.cpp:340:12 (bitcoind+0x5799ea)
94 [#47](/bitcoin-bitcoin/47/) decltype(static_cast<void (*>(fp)(static_cast<WorkQueue<HTTPClosure>*>(fp0), static_cast<int>(fp0))) std::__1::__invoke<void (*)(WorkQueue<HTTPClosure>*, int), WorkQueue<HTTPClosure>*, int>(void (*&&)(WorkQueue<HTTPClosure>*, int), WorkQueue<HTTPClosure>*&&, int&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x582d65)
95 [#48](/bitcoin-bitcoin/48/) void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(WorkQueue<HTTPClosure>*, int), WorkQueue<HTTPClosure>*, int, 2ul, 3ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(WorkQueue<HTTPClosure>*, int), WorkQueue<HTTPClosure>*, int>&, std::__1::__tuple_indices<2ul, 3ul>) /usr/lib/llvm-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0x582d65)
96 [#49](/bitcoin-bitcoin/49/) void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(WorkQueue<HTTPClosure>*, int), WorkQueue<HTTPClosure>*, int> >(void*) /usr/lib/llvm-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0x582d65)
97 Thread T17 'b-http' (tid=37941, running) created by main thread at:
98 [#0](/bitcoin-bitcoin/0/) pthread_create <null> (bitcoind+0xd435d)
99 [#1](/bitcoin-bitcoin/1/) std::__1::__libcpp_thread_create(unsigned long*, void* (*)(void*), void*) /usr/lib/llvm-13/bin/../include/c++/v1/__threading_support:443:10 (bitcoind+0x57d88e)
100 [#2](/bitcoin-bitcoin/2/) std::__1::thread::thread<bool (&)(event_base*), event_base*&, void>(bool (&)(event_base*), event_base*&) /usr/lib/llvm-13/bin/../include/c++/v1/thread:307:16 (bitcoind+0x57d88e)
101 [#3](/bitcoin-bitcoin/3/) StartHTTPServer() src/httpserver.cpp:427:21 (bitcoind+0x579546)
102 [#4](/bitcoin-bitcoin/4/) AppInitServers(node::NodeContext&) src/init.cpp:656:5 (bitcoind+0x169b6e)
103 [#5](/bitcoin-bitcoin/5/) AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1186:14 (bitcoind+0x161035)
104 [#6](/bitcoin-bitcoin/6/) AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:234:43 (bitcoind+0x14ade9)
105 [#7](/bitcoin-bitcoin/7/) main src/bitcoind.cpp:278:13 (bitcoind+0x14ade9)
106SUMMARY: ThreadSanitizer: data race (/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/src/bitcoind+0xd9e28) in closedir
107==================
lgtm. The failure rate was low for this one, so even if it still happens, it will take some time to reproduce.
Well. It did not take too much time (
I just fail to reproduce locally. Maybe this only happens with a specific kernel version that Cirrus CI uses?
Neither do I.
I’m curious whether https://github.com/llvm/llvm-project/commit/16baf59c6d0b3bf7392995e3e55fc9e2ba9cb5e7 fixes the TSan’s bug? If so, than this PR must be reverted until using clang-15.