diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2017-02-11 10:50:09 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2017-02-14 13:30:16 +0000 |
commit | 6c4d75a485904e1b06964aea953479c167b507e8 (patch) | |
tree | 1e44209a15d4ebbd0984f0d8a6388d0679df5674 /tests/auto/corelib/thread/qsemaphore | |
parent | 737383875e3878beebedbc04492d8b8d9d13bc71 (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.cpp | 6 |
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); |