diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2012-10-09 12:10:18 -0400 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2012-10-09 12:10:18 -0400 |
commit | cf64347d703a53735c9ef1220c93ddfbbaba475c (patch) | |
tree | 17dde877bc31a6a21efa47b221a986f4aa31045f | |
parent | 0a5ce30bc17bcbaa6ecf8c6da89fbb35424cdc8f (diff) | |
parent | cac6b389d101999d98c3137b17812cce062f924d (diff) |
Merge branch 'crash_at_exit' of github.com:gavinandresen/bitcoin-git
-rw-r--r-- | src/util.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/util.cpp b/src/util.cpp index 296842acc3..8b08827d73 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -220,8 +220,14 @@ inline int OutputDebugStringF(const char* pszFormat, ...) if (fileout) { static bool fStartedNewLine = true; - static boost::mutex mutexDebugLog; - boost::mutex::scoped_lock scoped_lock(mutexDebugLog); + + // This routine may be called by global destructors during shutdown. + // Since the order of destruction of static/global objects is undefined, + // allocate mutexDebugLog on the heap the first time this routine + // is called to avoid crashes during shutdown. + static boost::mutex* mutexDebugLog = NULL; + if (mutexDebugLog == NULL) mutexDebugLog = new boost::mutex(); + boost::mutex::scoped_lock scoped_lock(*mutexDebugLog); // reopen the log file, if requested if (fReopenDebugLog) { |