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.

Github-Pull: #30435
Rebased-From: 5fd4836019
This commit is contained in:
Martin Zumsande 2024-07-12 01:05:16 -04:00 committed by fanquake
parent ab42206652
commit 05192ba84c
No known key found for this signature in database
GPG key ID: 2EEB9F5CC09526C1

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.