summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@theqtcompany.com>2015-02-23 15:09:47 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-02-26 14:34:18 +0000
commitd0adfe64c69429da558ee24047f3be71f47a03ad (patch)
tree33a36dc36e0866e3037d2a535ee388aafcfd92d8 /src
parentbbf86a751a4cc235ef0fb97bfde4af487ab9a40f (diff)
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 <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/jobs/jobrunner.cpp1
-rw-r--r--src/core/jobs/qthreadpooler.cpp3
2 files changed, 3 insertions, 1 deletions
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<TaskInterface> 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<TaskInterface> QThreadPooler::nextTask()
const QSharedPointer<TaskInterface> &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;