scheduler: don't rely on boost interrupt on shutdown

Calling interrupt_all() will immediately stop the scheduler, so it's
safe to invoke stop() beforehand, and this removes the reliance on boost
to interrupt serviceQueue().
pull/764/head
Anthony Towns 5 years ago
parent 97aadf98d0
commit 306f71b4eb

@ -206,6 +206,7 @@ void Shutdown(NodeContext& node)
// After everything has been shut down, but before things get flushed, stop the
// CScheduler/checkqueue threadGroup
if (node.scheduler) node.scheduler->stop();
threadGroup.interrupt_all();
threadGroup.join_all();

@ -70,6 +70,8 @@ BOOST_FIXTURE_TEST_CASE(txindex_initial_sync, TestChain100Setup)
// shutdown sequence (c.f. Shutdown() in init.cpp)
txindex.Stop();
// txindex job may be scheduled, so stop scheduler before destructing
m_node.scheduler->stop();
threadGroup.interrupt_all();
threadGroup.join_all();

@ -140,6 +140,7 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha
TestingSetup::~TestingSetup()
{
if (m_node.scheduler) m_node.scheduler->stop();
threadGroup.interrupt_all();
threadGroup.join_all();
GetMainSignals().FlushBackgroundCallbacks();

Loading…
Cancel
Save