aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Zumsande <mzumsande@gmail.com>2024-07-12 01:05:16 -0400
committerMartin Zumsande <mzumsande@gmail.com>2024-07-12 11:47:50 -0400
commit5fd48360198d2ac49e43b24cc1469557b03567b8 (patch)
treee29c9917b6e7d4fcba555e52b675acb12a18b758 /src
parent33af14e31b9fa436029a2bb8c2b11de8feb32f86 (diff)
downloadbitcoin-5fd48360198d2ac49e43b24cc1469557b03567b8.tar.xz
init: change shutdown order of load block thread and scheduler
This avoids situations during a reindex in which shutdown doesn't finish since SyncWithValidationInterfaceQueue is called by the load block thread when the scheduler is already stopped.
Diffstat (limited to 'src')
-rw-r--r--src/init.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/init.cpp b/src/init.cpp
index e4b65fbfa9..03969b00bb 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -296,10 +296,11 @@ void Shutdown(NodeContext& node)
StopTorControl();
+ if (node.chainman && node.chainman->m_thread_load.joinable()) node.chainman->m_thread_load.join();
// After everything has been shut down, but before things get flushed, stop the
- // scheduler and load block thread.
+ // the scheduler. After this point, SyncWithValidationInterfaceQueue() should not be called anymore
+ // as this would prevent the shutdown from completing.
if (node.scheduler) node.scheduler->stop();
- if (node.chainman && node.chainman->m_thread_load.joinable()) node.chainman->m_thread_load.join();
// After the threads that potentially access these pointers have been stopped,
// destruct and reset all to nullptr.