Browse Source

Always wait for threadGroup to exit in bitcoind shutdown

This resolves a possible-assert-on-shutdown race introduced in
1f668b6468 when early shutdown
occurs.

Previously this was not done to avoid any cases where the
threadGroup might not exit due to a blocking thread, but at this
point the threadGroup isn't used all that much, plus Qt already
does this, and its good to keep their init/shutdown consistent.

For those curious, the threadGroup is only used in a few places:
 * Its used to run the CCheckQueues in script validation, but these
   use the boost mutex/condition variable primitives, so they
   respect the interrupt pretty trivially.
 * Its used for the import thread, which should exit rather quickly
   as mostly it just calls LoadExternalBlockFile, which has an
   interruption_point right before each block loaded.
 * Its used in the scheduler thread, which is only used for:
   * validationinterface has an effectively-dummy reference to it.
   * wallet compaction, which should not last long
   * addr/banlist dumping from CConnman, which should also be fast
0.15
Matt Corallo 7 years ago
parent
commit
efac91e654
  1. 4
      src/bitcoind.cpp

4
src/bitcoind.cpp

@ -176,9 +176,7 @@ bool AppInit(int argc, char* argv[])
if (!fRet) if (!fRet)
{ {
Interrupt(threadGroup); Interrupt(threadGroup);
// threadGroup.join_all(); was left out intentionally here, because we didn't re-test all of threadGroup.join_all();
// the startup-failure cases to make sure they don't result in a hang due to some
// thread-blocking-waiting-for-another-thread-during-startup case
} else { } else {
WaitForShutdown(&threadGroup); WaitForShutdown(&threadGroup);
} }

Loading…
Cancel
Save