# HG changeset patch # User Chris Cannam # Date 1406298101 -3600 # Node ID 387fa69f4eaa496f1ef25e09b1eb5ed6b3ec9ce7 # Parent 6d2ece0fe35637968428395746cdac60f7d687e5 Per-thread debug (avoiding some dubious threading problems) diff -r 6d2ece0fe356 -r 387fa69f4eaa base/Debug.cpp --- a/base/Debug.cpp Thu Jul 17 16:22:54 2014 +0100 +++ b/base/Debug.cpp Fri Jul 25 15:21:41 2014 +0100 @@ -24,20 +24,23 @@ #include #include #include +#include #include +static QThreadStorage debugs; +static QMutex mutex; +static QFile *logFile = 0; +static char *prefix = 0; + QDebug & getSVDebug() { - static QFile *logFile = 0; - static QDebug *debug = 0; - static QMutex mutex; - static char *prefix; - mutex.lock(); - if (!debug) { + QDebug *debug = 0; + + if (!prefix) { prefix = new char[20]; sprintf(prefix, "[%lu]", (unsigned long)QCoreApplication::applicationPid()); QString pfx = ResourceFinder().getUserResourcePrefix(); @@ -48,24 +51,34 @@ QDebug(QtDebugMsg) << (const char *)prefix << "Opened debug log file " << logFile->fileName(); - debug = new QDebug(logFile); } else { QDebug(QtWarningMsg) << (const char *)prefix << "Failed to open debug log file " << logFile->fileName() << " for writing, using console debug instead"; - debug = new QDebug(QtDebugMsg); delete logFile; logFile = 0; } + } + + if (debugs.hasLocalData()) { + debug = debugs.localData(); + } else { + if (logFile) { + debug = new QDebug(logFile); + } else { + debug = new QDebug(QtDebugMsg); + } + debugs.setLocalData(debug); *debug << endl << (const char *)prefix << "Log started at " << QDateTime::currentDateTime().toString(); } + mutex.unlock(); + QDebug &dref = *debug; dref << endl << (const char *)prefix; - mutex.unlock(); return dref; }