Remove Q_ASSERT from QMutex autotest

Rather than aborting in debug mode and doing nothing in release mode
when the invariant is violated, count the failures and fail the test
gracefully.

Change-Id: Ie193460c478ddde540b6b15aafdce32f471b4b2b
Task-number: QTBUG-17582
Reviewed-by: Rohan McGovern
(cherry picked from commit f18e0e01468899731bc3777649d69fd6d0041012)
This commit is contained in:
Jason McDonald 2011-05-03 11:53:57 +10:00 committed by Rohan McGovern
parent 83fcb8023a
commit 3aa7455eab

View File

@ -534,7 +534,12 @@ void tst_QMutex::tryLockRace()
TryLockRaceThread::mutex.unlock();
}
// Variable that will be protected by the mutex. Volatile so that the
// the optimiser doesn't mess with it based on the increment-then-decrement
// usage pattern.
static volatile int qtbug16115_trylock_counter;
// Counter for how many times the protected variable has an incorrect value.
static int qtbug16115_failure_count = 0;
void tst_QMutex::qtbug16115_trylock()
{
@ -545,8 +550,10 @@ void tst_QMutex::qtbug16115_trylock()
void run() {
for (int i = 0; i < 1000000; ++i) {
if (mut.tryLock(0)) {
Q_ASSERT((++qtbug16115_trylock_counter) == 1);
Q_ASSERT((--qtbug16115_trylock_counter) == 0);
if ((++qtbug16115_trylock_counter) != 1)
++qtbug16115_failure_count;
if ((--qtbug16115_trylock_counter) != 0)
++qtbug16115_failure_count;
mut.unlock();
}
}
@ -562,13 +569,16 @@ void tst_QMutex::qtbug16115_trylock()
for (int i = 0; i < 1000000; ++i) {
mut.lock();
Q_ASSERT((++qtbug16115_trylock_counter) == 1);
Q_ASSERT((--qtbug16115_trylock_counter) == 0);
if ((++qtbug16115_trylock_counter) != 1)
++qtbug16115_failure_count;
if ((--qtbug16115_trylock_counter) != 0)
++qtbug16115_failure_count;
mut.unlock();
}
t1.wait();
t2.wait();
t3.wait();
QCOMPARE(qtbug16115_failure_count, 0);
}
QTEST_MAIN(tst_QMutex)