diff options
author | Larry Ruane <larryruane@gmail.com> | 2021-07-28 16:18:53 -0600 |
---|---|---|
committer | Larry Ruane <larryruane@gmail.com> | 2021-07-30 16:34:09 -0600 |
commit | 703b1e612a4bd4521e20ae21eb8fb7c19f4ef942 (patch) | |
tree | b51b0648990daf22ce59322f9b6abcf64619d6e3 /src/init.cpp | |
parent | 4b1fb50def0dea0cd320bc43c12d9a12edde0390 (diff) |
Close minor startup race between main and scheduler threads
Don't schedule class PeerManagerImpl's background tasks from its
constructor, but instead do that from a separate method,
StartScheduledTasks(), that can be called later at the end of startup,
after other things, such as the active chain, are initialzed.
Diffstat (limited to 'src/init.cpp')
-rw-r--r-- | src/init.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/init.cpp b/src/init.cpp index 75394d96b1..a0f318b8bc 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1180,7 +1180,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) assert(!node.peerman); node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(), - *node.scheduler, chainman, *node.mempool, ignores_incoming_txs); + chainman, *node.mempool, ignores_incoming_txs); RegisterValidationInterface(node.peerman.get()); // sanitize comments per BIP-0014, format user agent and check total size @@ -1789,6 +1789,8 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) banman->DumpBanlist(); }, DUMP_BANS_INTERVAL); + if (node.peerman) node.peerman->StartScheduledTasks(*node.scheduler); + #if HAVE_SYSTEM StartupNotify(args); #endif |