Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[27.x] More backports #30467

Merged
merged 8 commits into from
Jul 24, 2024
Prev Previous commit
Next Next commit
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: 5fd4836
  • Loading branch information
mzumsande authored and fanquake committed Jul 17, 2024
commit 05192ba84c2d0ef727c9dbc1e6af4ce8a59458fa
5 changes: 3 additions & 2 deletions src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down