Remove Q_ASSERT's from qreadwritelock autotest
The tryWriteLock testfunction didn't do anything useful in non-debug builds, due to the thread having the important code inside Q_ASSERT's, which are no-ops in non-debug builds. This commit removes the Q_ASSERT's, counts the number of failures in the thread and fails the test if there are any failures recorded. Change-Id: I4750f66eeba22ab51ba348ebc06704052421f1ae Task-number: QTBUG-17582 Reviewed-by: Rohan McGovern (cherry picked from commit 00f724c943b83f10f9ca9475570708536947538e)
This commit is contained in:
parent
1799546675
commit
8094e93e08
@ -362,34 +362,45 @@ void tst_QReadWriteLock::tryWriteLock()
|
|||||||
class Thread : public QThread
|
class Thread : public QThread
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Thread() : failureCount(0) { }
|
||||||
void run()
|
void run()
|
||||||
{
|
{
|
||||||
testsTurn.release();
|
testsTurn.release();
|
||||||
|
|
||||||
threadsTurn.acquire();
|
threadsTurn.acquire();
|
||||||
Q_ASSERT(!readWriteLock.tryLockForWrite());
|
if (readWriteLock.tryLockForWrite())
|
||||||
|
failureCount++;
|
||||||
testsTurn.release();
|
testsTurn.release();
|
||||||
|
|
||||||
threadsTurn.acquire();
|
threadsTurn.acquire();
|
||||||
Q_ASSERT(readWriteLock.tryLockForWrite());
|
if (!readWriteLock.tryLockForWrite())
|
||||||
Q_ASSERT(lockCount.testAndSetRelaxed(0, 1));
|
failureCount++;
|
||||||
Q_ASSERT(lockCount.testAndSetRelaxed(1, 0));
|
if (!lockCount.testAndSetRelaxed(0, 1))
|
||||||
|
failureCount++;
|
||||||
|
if (!lockCount.testAndSetRelaxed(1, 0))
|
||||||
|
failureCount++;
|
||||||
readWriteLock.unlock();
|
readWriteLock.unlock();
|
||||||
testsTurn.release();
|
testsTurn.release();
|
||||||
|
|
||||||
threadsTurn.acquire();
|
threadsTurn.acquire();
|
||||||
Q_ASSERT(!readWriteLock.tryLockForWrite(1000));
|
if (readWriteLock.tryLockForWrite(1000))
|
||||||
|
failureCount++;
|
||||||
testsTurn.release();
|
testsTurn.release();
|
||||||
|
|
||||||
threadsTurn.acquire();
|
threadsTurn.acquire();
|
||||||
Q_ASSERT(readWriteLock.tryLockForWrite(1000));
|
if (!readWriteLock.tryLockForWrite(1000))
|
||||||
Q_ASSERT(lockCount.testAndSetRelaxed(0, 1));
|
failureCount++;
|
||||||
Q_ASSERT(lockCount.testAndSetRelaxed(1, 0));
|
if (!lockCount.testAndSetRelaxed(0, 1))
|
||||||
|
failureCount++;
|
||||||
|
if (!lockCount.testAndSetRelaxed(1, 0))
|
||||||
|
failureCount++;
|
||||||
readWriteLock.unlock();
|
readWriteLock.unlock();
|
||||||
testsTurn.release();
|
testsTurn.release();
|
||||||
|
|
||||||
threadsTurn.acquire();
|
threadsTurn.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int failureCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
Thread thread;
|
Thread thread;
|
||||||
@ -419,6 +430,8 @@ void tst_QReadWriteLock::tryWriteLock()
|
|||||||
testsTurn.acquire();
|
testsTurn.acquire();
|
||||||
threadsTurn.release();
|
threadsTurn.release();
|
||||||
thread.wait();
|
thread.wait();
|
||||||
|
|
||||||
|
QCOMPARE(thread.failureCount, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user