summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2014-06-08 14:10:56 +0200
committerDavid Faure <david.faure@kdab.com>2014-07-01 20:23:31 +0200
commit9ee27005ee3cfa295c681a5ac04ac1c282b396ca (patch)
tree22975442a70973adfd3ebe8bab564dc20b725ee5 /tests/auto
parent0272ce641778ddaba6ac550b6bbfd4e5e5adaad1 (diff)
qDebug: fix data race in qt_message_print
The setting of (static) messageHandler to qDefaultMessageHandler if null was happening in multiple threads simultaneously, so it needs synchronization. Used an atomic pointer in case qInstallMessageHandler is called from a thread, but more importantly, initialized the static vars right away. Improve auto test to ensure that qInstallMessageHandler(0) still sets the default message handler. Change-Id: I70335af38c1d28a1cdba1df8a79c6006f227422e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/corelib/io/qdebug/tst_qdebug.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
index 8fd830a839..99c4ee7edc 100644
--- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
+++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
@@ -299,12 +299,13 @@ void tst_QDebug::textStreamModifiers() const
void tst_QDebug::defaultMessagehandler() const
{
- MessageHandlerSetter mhs(0);
- QtMessageHandler defaultMessageHandler1 = qInstallMessageHandler((QtMessageHandler)0);
- QtMessageHandler defaultMessageHandler2 = qInstallMessageHandler(myMessageHandler);
+ MessageHandlerSetter mhs(0); // set 0, should set default handler
+ QtMessageHandler defaultMessageHandler1 = qInstallMessageHandler((QtMessageHandler)0); // set 0, should set and return default handler
+ QVERIFY(defaultMessageHandler1);
+ QtMessageHandler defaultMessageHandler2 = qInstallMessageHandler(myMessageHandler); // set myMessageHandler and return default handler
bool same = (*defaultMessageHandler1 == *defaultMessageHandler2);
QVERIFY(same);
- QtMessageHandler messageHandler = qInstallMessageHandler((QtMessageHandler)0);
+ QtMessageHandler messageHandler = qInstallMessageHandler((QtMessageHandler)0); // set 0, should set default and return myMessageHandler
same = (*messageHandler == *myMessageHandler);
QVERIFY(same);
}