From d0adfe64c69429da558ee24047f3be71f47a03ad Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Mon, 23 Feb 2015 15:09:47 +0200 Subject: Fix for ThreadPooler flush Increment running thread counter before removing task from the queue. This prevents the idle test to pass if queue is empty and job runner hasn't yet increased the counter. Change-Id: I01992ef6e9b437d2ce3d9f62e6025b3122e19fa8 Reviewed-by: Paul Lemire --- src/core/jobs/jobrunner.cpp | 1 - src/core/jobs/qthreadpooler.cpp | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'src/core') diff --git a/src/core/jobs/jobrunner.cpp b/src/core/jobs/jobrunner.cpp index d1cfe234b..ab5555585 100644 --- a/src/core/jobs/jobrunner.cpp +++ b/src/core/jobs/jobrunner.cpp @@ -66,7 +66,6 @@ void JobRunner::run() while (!m_abort.load()) { if (const QSharedPointer task = m_pooler->nextTask()) { - m_pooler->startRunning(); task->run(task, this); m_pooler->stopRunning(); } else { diff --git a/src/core/jobs/qthreadpooler.cpp b/src/core/jobs/qthreadpooler.cpp index 1620185b5..e187e8bff 100644 --- a/src/core/jobs/qthreadpooler.cpp +++ b/src/core/jobs/qthreadpooler.cpp @@ -176,6 +176,9 @@ QSharedPointer QThreadPooler::nextTask() const QSharedPointer &candidate = d->m_taskQueue.at(i); if (!hasDependencies(candidate)) { task = candidate; + // Increment running thread counter before removing item from queue + // so that isIdle test keeps up + d->incRunningThreads(); d->m_taskQueue.removeAt(i); break; -- cgit v1.2.3