Remove Q_ASSERT from QMutex autotest
authorJason McDonald <jason.mcdonald@nokia.com>
Tue, 3 May 2011 01:53:57 +0000 (11:53 +1000)
committerRohan McGovern <rohan.mcgovern@nokia.com>
Wed, 18 May 2011 00:46:45 +0000 (10:46 +1000)
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)

tests/auto/qmutex/tst_qmutex.cpp

index a8c4b37..99fa985 100644 (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)