Logging: Simplify message handler logic for windows
authorKai Koehne <kai.koehne@nokia.com>
Fri, 13 Jul 2012 11:31:45 +0000 (13:31 +0200)
committerQt by Nokia <qt-info@nokia.com>
Sat, 21 Jul 2012 14:24:43 +0000 (16:24 +0200)
Incorporate the functionality of qWinMessageHandler in qDefaultMessageHandler.

Change-Id: Iec5b19e187c0d2e3d8d0874280ba57f6fb21d7b4
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
src/corelib/global/qlogging.cpp
src/corelib/kernel/qcoreapplication_win.cpp

index b0afc5a..c567d33 100644 (file)
@@ -633,12 +633,21 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con
                                    const QString &buf)
 {
     QString logMessage = qMessageFormatString(type, context, buf);
-#if defined(Q_OS_WINCE)
-    OutputDebugString(reinterpret_cast<const wchar_t *> (logMessage.utf16()));
-#else
+
+#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
+#if !defined(Q_OS_WINCE)
+    if (usingWinMain)
+#endif
+    {
+        // OutputDebugString is not threadsafe.
+        static QBasicMutex outputDebugStringMutex;
+        QMutexLocker locker(&outputDebugStringMutex);
+        OutputDebugString(reinterpret_cast<const wchar_t *>(logMessage.utf16()));
+        return;
+    }
+#endif // Q_OS_WIN
     fprintf(stderr, "%s", logMessage.toLocal8Bit().constData());
     fflush(stderr);
-#endif
 }
 
 /*!
@@ -728,18 +737,6 @@ void qErrnoWarning(int code, const char *msg, ...)
     qt_message_output(QtCriticalMsg, context, buf);
 }
 
-#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
-extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char *str);
-extern Q_CORE_EXPORT void qWinMessageHandler(QtMsgType t, const QMessageLogContext &context,
-                                             const QString &str);
-
-void qWinMessageHandler2(QtMsgType t, const QMessageLogContext &context,
-                         const char *str)
-{
-    qWinMessageHandler(t, context, QString::fromLocal8Bit(str));
-}
-#endif
-
 /*!
     \typedef QtMsgHandler
     \relates <QtGlobal>
@@ -852,10 +849,6 @@ QtMessageHandler qInstallMessageHandler(QtMessageHandler h)
         messageHandler = qDefaultMessageHandler;
     QtMessageHandler old = messageHandler;
     messageHandler = h;
-#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
-    if (!messageHandler && usingWinMain)
-        messageHandler = qWinMessageHandler;
-#endif
     return old;
 }
 
@@ -867,10 +860,6 @@ QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
         msgHandler = qDefaultMsgHandler;
     QtMsgHandler old = msgHandler;
     msgHandler = h;
-#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
-    if (!msgHandler && usingWinMain)
-        msgHandler = qWinMsgHandler;
-#endif
     return old;
 }
 
index 9d92f83..e424119 100644 (file)
@@ -125,46 +125,6 @@ QString QCoreApplicationPrivate::appName() const
     return QFileInfo(qAppFileName()).baseName();
 }
 
-class QWinMsgHandlerCriticalSection
-{
-    CRITICAL_SECTION cs;
-public:
-    QWinMsgHandlerCriticalSection()
-    { InitializeCriticalSection(&cs); }
-    ~QWinMsgHandlerCriticalSection()
-    { DeleteCriticalSection(&cs); }
-
-    void lock()
-    { EnterCriticalSection(&cs); }
-    void unlock()
-    { LeaveCriticalSection(&cs); }
-};
-
-// defined in qlogging.cpp
-extern Q_CORE_EXPORT QString qMessageFormatString(QtMsgType type,
-                                                  const QMessageLogContext &context,
-                                                  const QString &str);
-
-Q_CORE_EXPORT void qWinMessageHandler(QtMsgType t, const QMessageLogContext &context, const QString &str)
-{
-    // cannot use QMutex here, because qWarning()s in the QMutex
-    // implementation may cause this function to recurse
-    static QWinMsgHandlerCriticalSection staticCriticalSection;
-
-    QString message = qMessageFormatString(t, context, str);
-
-    // OutputDebugString is not threadsafe.
-    staticCriticalSection.lock();
-    OutputDebugString((wchar_t*)message.utf16());
-    staticCriticalSection.unlock();
-}
-
-Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char *str)
-{
-    QMessageLogContext emptyContext;
-    qWinMessageHandler(t, emptyContext, QString::fromLocal8Bit(str));
-}
-
 /*****************************************************************************
   qWinMain() - Initializes Windows. Called from WinMain() in qtmain_win.cpp
  *****************************************************************************/
@@ -187,9 +147,6 @@ void qWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdParam,
     already_called = true;
     usingWinMain = true;
 
-    // Install default debug handler
-    qInstallMessageHandler(qWinMessageHandler);
-
     // Create command line
     argv = qWinCmdLine<char>(cmdParam, int(strlen(cmdParam)), argc);