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.
This commit is contained in:
Martin Zumsande 2024-07-12 01:05:16 -04:00
parent 33af14e31b
commit 5fd4836019

View file

@ -296,10 +296,11 @@ void Shutdown(NodeContext& node)
StopTorControl();
// After everything has been shut down, but before things get flushed, stop the
// scheduler and load block thread.
if (node.scheduler) node.scheduler->stop();
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
// 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();
// After the threads that potentially access these pointers have been stopped,
// destruct and reset all to nullptr.