summaryrefslogtreecommitdiffstats
path: root/src/core/jobs/qthreadpooler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/jobs/qthreadpooler.cpp')
-rw-r--r--src/core/jobs/qthreadpooler.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/core/jobs/qthreadpooler.cpp b/src/core/jobs/qthreadpooler.cpp
index 890a8942a..94d5b29c2 100644
--- a/src/core/jobs/qthreadpooler.cpp
+++ b/src/core/jobs/qthreadpooler.cpp
@@ -73,21 +73,25 @@ void QThreadPooler::enqueueTasks(QVector<RunnableInterface *> &tasks)
for (QVector<RunnableInterface *>::iterator it = tasks.begin();
it != tasks.end(); it++) {
- if (!m_dependencyHandler->hasDependency((*it))) {
+ if (!m_dependencyHandler->hasDependency((*it)) && !(*it)->reserved()) {
+ (*it)->setReserved(true);
(*it)->setPooler(this);
QThreadPool::globalInstance()->start((*it));
}
}
}
-void QThreadPooler::taskFinished(QVector<RunnableInterface *> tasks)
+void QThreadPooler::taskFinished(RunnableInterface *task)
{
const QMutexLocker locker(m_mutex);
release();
- if (tasks.size())
- enqueueTasks(tasks);
+ QVector<RunnableInterface *> freedTasks;
+ if (task->dependencyHandler())
+ freedTasks = m_dependencyHandler->freeDependencies(task);
+ if (freedTasks.size())
+ enqueueTasks(freedTasks);
if (currentCount() == 0) {
if (m_futureInterface) {