diff options
| author | Philip Kaufmann <[email protected]> | 2013-10-06 14:18:55 +0200 |
|---|---|---|
| committer | Philip Kaufmann <[email protected]> | 2013-10-07 08:52:54 +0200 |
| commit | c55d1600da35e3882f149b00f972c0ef9cb41dfa (patch) | |
| tree | 1c73c33736e93fac079a9724f5b40dbd269da10e /src/bitcoind.cpp | |
| parent | Merge pull request #3056 from Diapolo/stuck_debug_window (diff) | |
| download | discoin-c55d1600da35e3882f149b00f972c0ef9cb41dfa.tar.xz discoin-c55d1600da35e3882f149b00f972c0ef9cb41dfa.zip | |
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
Diffstat (limited to 'src/bitcoind.cpp')
| -rw-r--r-- | src/bitcoind.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 02e4e7d6e..407e1d28c 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -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[]) } 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) |