summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/thread/qsemaphore
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2017-02-11 10:50:09 +0100
committerMarc Mutz <marc.mutz@kdab.com>2017-02-14 13:30:16 +0000
commit6c4d75a485904e1b06964aea953479c167b507e8 (patch)
tree1e44209a15d4ebbd0984f0d8a6388d0679df5674 /tests/auto/corelib/thread/qsemaphore
parent737383875e3878beebedbc04492d8b8d9d13bc71 (diff)
tst_QSemaphore: avoid deadlock on test failures
When one of the QCOMPAREs in Consumer::run() fails, the consumer returns early, leaving the producer deadlocked in a QSemaphore's acquire() call. Change these to tryAcquire() with a large timeout, so the producer, too, eventually leaves run(). Change-Id: I7421d43305decd4754e09c8e092363594d1be06b Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'tests/auto/corelib/thread/qsemaphore')
-rw-r--r--tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp b/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp
index 8597bf1a6d..e984618bdb 100644
--- a/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp
+++ b/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp
@@ -367,16 +367,18 @@ public:
void run();
};
+static const int Timeout = 60 * 1000; // 1min
+
void Producer::run()
{
for (int i = 0; i < DataSize; ++i) {
- freeSpace.acquire();
+ QVERIFY(freeSpace.tryAcquire(1, Timeout));
buffer[i % BufferSize] = alphabet[i % AlphabetSize];
usedSpace.release();
}
for (int i = 0; i < DataSize; ++i) {
if ((i % ProducerChunkSize) == 0)
- freeSpace.acquire(ProducerChunkSize);
+ QVERIFY(freeSpace.tryAcquire(ProducerChunkSize, Timeout));
buffer[i % BufferSize] = alphabet[i % AlphabetSize];
if ((i % ProducerChunkSize) == (ProducerChunkSize - 1))
usedSpace.release(ProducerChunkSize);