QTestLib: fix race on QElapsedTimers from WatchDog thread
The WatchDog thread calls printTestRunTime() which reads the two timers, created and started in the main thread. Pick-to: 6.9 6.8 6.5 Change-Id: I1a337648fddf87190075b7902311544d0ab21ac3 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
parent
4fd7d31e09
commit
9e32306dae
@ -69,6 +69,7 @@ static void saveCoverageTool(const char * appname, bool testfailed, bool install
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Q_CONSTINIT static QBasicMutex elapsedTimersMutex; // due to the WatchDog thread
|
||||||
Q_CONSTINIT static QElapsedTimer elapsedFunctionTime;
|
Q_CONSTINIT static QElapsedTimer elapsedFunctionTime;
|
||||||
Q_CONSTINIT static QElapsedTimer elapsedTotalTime;
|
Q_CONSTINIT static QElapsedTimer elapsedTotalTime;
|
||||||
|
|
||||||
@ -320,7 +321,10 @@ namespace QTest {
|
|||||||
|
|
||||||
void QTestLog::enterTestFunction(const char* function)
|
void QTestLog::enterTestFunction(const char* function)
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&elapsedTimersMutex);
|
||||||
elapsedFunctionTime.start();
|
elapsedFunctionTime.start();
|
||||||
|
}
|
||||||
if (printAvailableTags)
|
if (printAvailableTags)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -548,8 +552,11 @@ void QTestLog::addBenchmarkResults(const QList<QBenchmarkResult> &results)
|
|||||||
|
|
||||||
void QTestLog::startLogging()
|
void QTestLog::startLogging()
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&elapsedTimersMutex);
|
||||||
elapsedTotalTime.start();
|
elapsedTotalTime.start();
|
||||||
elapsedFunctionTime.start();
|
elapsedFunctionTime.start();
|
||||||
|
}
|
||||||
for (auto &logger : QTest::loggers->allLoggers())
|
for (auto &logger : QTest::loggers->allLoggers())
|
||||||
logger->startLogging();
|
logger->startLogging();
|
||||||
QTest::oldMessageHandler = qInstallMessageHandler(QTest::messageHandler);
|
QTest::oldMessageHandler = qInstallMessageHandler(QTest::messageHandler);
|
||||||
@ -767,11 +774,13 @@ bool QTestLog::installedTestCoverage()
|
|||||||
|
|
||||||
qint64 QTestLog::nsecsTotalTime()
|
qint64 QTestLog::nsecsTotalTime()
|
||||||
{
|
{
|
||||||
|
QMutexLocker locker(&elapsedTimersMutex);
|
||||||
return elapsedTotalTime.nsecsElapsed();
|
return elapsedTotalTime.nsecsElapsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QTestLog::nsecsFunctionTime()
|
qint64 QTestLog::nsecsFunctionTime()
|
||||||
{
|
{
|
||||||
|
QMutexLocker locker(&elapsedTimersMutex);
|
||||||
return elapsedFunctionTime.nsecsElapsed();
|
return elapsedFunctionTime.nsecsElapsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user