summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qlogging.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-04 14:43:57 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-07-04 18:46:06 +0200
commit14a80bd4df83e960de458403deaf895a3d2c8812 (patch)
tree1bf8a79b746378b14f64dbb32bb3bf5119d22f0c /src/corelib/global/qlogging.cpp
parent3acd4b546ded7523f65d60cee6f3809113a91a16 (diff)
parent39a290af6cea538dbbdb207d03d2af3602015c95 (diff)
Merge "Merge remote-tracking branch 'origin/5.3' into dev" into refs/staging/dev
Diffstat (limited to 'src/corelib/global/qlogging.cpp')
-rw-r--r--src/corelib/global/qlogging.cpp42
1 files changed, 19 insertions, 23 deletions
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index c3a4909932..63dd4c1387 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -1100,8 +1100,13 @@ typedef void (*QtMsgHandler)(QtMsgType, const char *);
Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
#endif
-static QtMsgHandler msgHandler = 0; // pointer to debug handler (without context)
-static QtMessageHandler messageHandler = 0; // pointer to debug handler (with context)
+static void qDefaultMsgHandler(QtMsgType type, const char *buf);
+static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &buf);
+
+// pointer to QtMsgHandler debug handler (without context)
+static QBasicAtomicPointer<void (QtMsgType, const char*)> msgHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMsgHandler);
+// pointer to QtMessageHandler debug handler (with context)
+static QBasicAtomicPointer<void (QtMsgType, const QMessageLogContext &, const QString &)> messageHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMessageHandler);
#if defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED)
static void systemd_default_message_handler(QtMsgType type,
@@ -1267,20 +1272,15 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
}
#endif
- if (!msgHandler)
- msgHandler = qDefaultMsgHandler;
- if (!messageHandler)
- messageHandler = qDefaultMessageHandler;
-
// prevent recursion in case the message handler generates messages
// itself, e.g. by using Qt API
if (grabMessageHandler()) {
// prefer new message handler over the old one
- if (msgHandler == qDefaultMsgHandler
- || messageHandler != qDefaultMessageHandler) {
- (*messageHandler)(msgType, context, message);
+ if (msgHandler.load() == qDefaultMsgHandler
+ || messageHandler.load() != qDefaultMessageHandler) {
+ (*messageHandler.load())(msgType, context, message);
} else {
- (*msgHandler)(msgType, message.toLocal8Bit().constData());
+ (*msgHandler.load())(msgType, message.toLocal8Bit().constData());
}
ungrabMessageHandler();
} else {
@@ -1485,22 +1485,18 @@ void qErrnoWarning(int code, const char *msg, ...)
QtMessageHandler qInstallMessageHandler(QtMessageHandler h)
{
- if (!messageHandler)
- messageHandler = qDefaultMessageHandler;
- QtMessageHandler old = messageHandler;
- messageHandler = h;
- return old;
+ if (!h)
+ h = qDefaultMessageHandler;
+ //set 'h' and return old message handler
+ return messageHandler.fetchAndStoreRelaxed(h);
}
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
{
- //if handler is 0, set it to the
- //default message handler
- if (!msgHandler)
- msgHandler = qDefaultMsgHandler;
- QtMsgHandler old = msgHandler;
- msgHandler = h;
- return old;
+ if (!h)
+ h = qDefaultMsgHandler;
+ //set 'h' and return old message handler
+ return msgHandler.fetchAndStoreRelaxed(h);
}
void qSetMessagePattern(const QString &pattern)