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:
Jason McDonald 2011-05-09 13:46:32 +10:00 committed by Rohan McGovern
parent 1799546675
commit 8094e93e08

View File

@ -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);
} }
} }