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>bb10
parent
737383875e
commit
6c4d75a485
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue