diff options
author | TheCharlatan <seb.kung@gmail.com> | 2024-09-13 10:22:00 +0200 |
---|---|---|
committer | TheCharlatan <seb.kung@gmail.com> | 2024-09-13 16:10:31 +0200 |
commit | bc7900f33db3d01fb93dfee7981c01ea495cd42e (patch) | |
tree | a6c0d14338f5418e666fbe38ff3b1c2d6b5ea048 /src | |
parent | a5e99669ccfe0683749ce2e2b21732a359ef62d7 (diff) | |
download | bitcoin-bc7900f33db3d01fb93dfee7981c01ea495cd42e.tar.xz |
kernel: Move background load thread to node context
The thread handle is never used by the ChainstateManager, so move it out
and into the node context. Users of the kernel library now no longer
have to manually join the thread when destructing the ChainstateManager.
Diffstat (limited to 'src')
-rw-r--r-- | src/bitcoin-chainstate.cpp | 2 | ||||
-rw-r--r-- | src/init.cpp | 4 | ||||
-rw-r--r-- | src/node/context.h | 2 | ||||
-rw-r--r-- | src/validation.h | 2 |
4 files changed, 4 insertions, 6 deletions
diff --git a/src/bitcoin-chainstate.cpp b/src/bitcoin-chainstate.cpp index ebe013b638..9cbafa233d 100644 --- a/src/bitcoin-chainstate.cpp +++ b/src/bitcoin-chainstate.cpp @@ -283,8 +283,6 @@ int main(int argc, char* argv[]) epilogue: // Without this precise shutdown sequence, there will be a lot of nullptr // dereferencing and UB. - if (chainman.m_thread_load.joinable()) chainman.m_thread_load.join(); - validation_signals.FlushBackgroundCallbacks(); { LOCK(cs_main); diff --git a/src/init.cpp b/src/init.cpp index f67835d7da..da3d99b6bf 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -298,7 +298,7 @@ void Shutdown(NodeContext& node) StopTorControl(); - if (node.chainman && node.chainman->m_thread_load.joinable()) node.chainman->m_thread_load.join(); + if (node.background_init_thread.joinable()) node.background_init_thread.join(); // After everything has been shut down, but before things get flushed, stop the // the scheduler. After this point, SyncWithValidationInterfaceQueue() should not be called anymore // as this would prevent the shutdown from completing. @@ -1789,7 +1789,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) vImportFiles.push_back(fs::PathFromString(strFile)); } - chainman.m_thread_load = std::thread(&util::TraceThread, "initload", [=, &chainman, &args, &node] { + node.background_init_thread = std::thread(&util::TraceThread, "initload", [=, &chainman, &args, &node] { ScheduleBatchPriority(); // Import blocks ImportBlocks(chainman, vImportFiles); diff --git a/src/node/context.h b/src/node/context.h index a664fad80b..398089ff3c 100644 --- a/src/node/context.h +++ b/src/node/context.h @@ -9,6 +9,7 @@ #include <cstdlib> #include <functional> #include <memory> +#include <thread> #include <vector> class ArgsManager; @@ -86,6 +87,7 @@ struct NodeContext { std::atomic<int> exit_status{EXIT_SUCCESS}; //! Manages all the node warnings std::unique_ptr<node::Warnings> warnings; + std::thread background_init_thread; //! Declare default constructor and destructor that are not inline, so code //! instantiating the NodeContext struct doesn't need to #include class diff --git a/src/validation.h b/src/validation.h index 059ae52bdf..6bc8a14de9 100644 --- a/src/validation.h +++ b/src/validation.h @@ -42,7 +42,6 @@ #include <span> #include <stdint.h> #include <string> -#include <thread> #include <type_traits> #include <utility> #include <vector> @@ -1008,7 +1007,6 @@ public: const util::SignalInterrupt& m_interrupt; const Options m_options; - std::thread m_thread_load; //! A single BlockManager instance is shared across each constructed //! chainstate to avoid duplicating block metadata. node::BlockManager m_blockman; |