Browse Source

add missing Boost Thread join_all() call during shutdown

- fixes #3037 by adding missing join_all() call and brings bitcoind
  shutdown code in line with Bitcoin-Qt shutdown code
- added a comment for the if (!fRet) case
0.10
Philip Kaufmann 11 years ago
parent
commit
c55d1600da
  1. 17
      src/bitcoind.cpp

17
src/bitcoind.cpp

@ -9,15 +9,18 @@ @@ -9,15 +9,18 @@
void DetectShutdownThread(boost::thread_group* threadGroup)
{
bool shutdown = ShutdownRequested();
bool fShutdown = ShutdownRequested();
// Tell the main threads to shutdown.
while (!shutdown)
while (!fShutdown)
{
MilliSleep(200);
shutdown = ShutdownRequested();
fShutdown = ShutdownRequested();
}
if (threadGroup)
{
threadGroup->interrupt_all();
threadGroup->join_all();
}
}
//////////////////////////////////////////////////////////////////////////////
@ -107,10 +110,16 @@ bool AppInit(int argc, char* argv[]) @@ -107,10 +110,16 @@ bool AppInit(int argc, char* argv[])
} catch (...) {
PrintExceptionContinue(NULL, "AppInit()");
}
if (!fRet) {
if (!fRet)
{
if (detectShutdownThread)
detectShutdownThread->interrupt();
threadGroup.interrupt_all();
// threadGroup.join_all(); was left out intentionally here, because we didn't re-test all of
// 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
}
if (detectShutdownThread)

Loading…
Cancel
Save