Merge pull request #3059 from Diapolo/Shutdown

add missing Boost Thread join_all() call during shutdown
This commit is contained in:
Gavin Andresen 2013-10-07 15:42:07 -07:00
commit aa56d317a5
1 changed files with 13 additions and 4 deletions

View File

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