diff --git a/src/testlib/qjunittestlogger.cpp b/src/testlib/qjunittestlogger.cpp index 2ba6e71bb98..ef4f1561c15 100644 --- a/src/testlib/qjunittestlogger.cpp +++ b/src/testlib/qjunittestlogger.cpp @@ -130,14 +130,17 @@ void QJUnitTestLogger::enterTestFunction(const char *function) void QJUnitTestLogger::enterTestCase(const char *name) { - currentTestCase = new QTestElement(QTest::LET_TestCase); - currentTestCase->addAttribute(QTest::AI_Name, name); - currentTestCase->addAttribute(QTest::AI_Classname, QTestResult::currentTestObjectName()); - listOfTestcases.push_back(currentTestCase); + { + QMutexLocker locker(&mutex); + currentTestCase = new QTestElement(QTest::LET_TestCase); + currentTestCase->addAttribute(QTest::AI_Name, name); + currentTestCase->addAttribute(QTest::AI_Classname, QTestResult::currentTestObjectName()); + listOfTestcases.push_back(currentTestCase); - Q_ASSERT(!systemOutputElement && !systemErrorElement); - systemOutputElement = new QTestElement(QTest::LET_SystemOutput); - systemErrorElement = new QTestElement(QTest::LET_SystemError); + Q_ASSERT(!systemOutputElement && !systemErrorElement); + systemOutputElement = new QTestElement(QTest::LET_SystemOutput); + systemErrorElement = new QTestElement(QTest::LET_SystemError); + } // The element will be deleted when the suite is deleted @@ -174,6 +177,7 @@ void QJUnitTestLogger::leaveTestFunction() void QJUnitTestLogger::leaveTestCase() { + QMutexLocker locker(&mutex); currentTestCase->addAttribute(QTest::AI_Time, toSecondsFormat(elapsedTestCaseSeconds() * 1000).constData()); @@ -257,6 +261,7 @@ void QJUnitTestLogger::addMessage(MessageTypes type, const QString &message, con Q_UNUSED(file); Q_UNUSED(line); + QMutexLocker locker(&mutex); if (type == QFatal) { addFailure(QTest::LET_Error, "qfatal", message); return; diff --git a/src/testlib/qjunittestlogger_p.h b/src/testlib/qjunittestlogger_p.h index 6a7ff316152..6c4c7d71f2a 100644 --- a/src/testlib/qjunittestlogger_p.h +++ b/src/testlib/qjunittestlogger_p.h @@ -19,6 +19,7 @@ #include #include +#include #include @@ -61,6 +62,9 @@ class QJUnitTestLogger : public QAbstractTestLogger QTestElement *systemOutputElement = nullptr; QTestElement *systemErrorElement = nullptr; QTestJUnitStreamer *logFormatter = nullptr; + // protects currentTestCase, systemOutputElement and systemErrorElement + // in case of qDebug()/qWarning() etc. from threads + QMutex mutex; int testCounter = 0; int failureCounter = 0;