From 21c9dfef8bf81f7a1910d5d07baf9fdab39750a4 Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Mon, 27 Apr 2015 16:47:15 +0300 Subject: Add checks for double task execution On ThreadPooler done tasks are also removed from the dependency pair list. Also added reserved flag for tasks. These prevent tasks getting into execution more than once. Change-Id: Ia9e5377c883ad08079a9af32c4a2a294db425eb2 Reviewed-by: Sean Harmer Reviewed-by: Paul Lemire --- src/core/jobs/task.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/core/jobs/task.cpp') diff --git a/src/core/jobs/task.cpp b/src/core/jobs/task.cpp index 55f4bacb6..8cfc365fa 100644 --- a/src/core/jobs/task.cpp +++ b/src/core/jobs/task.cpp @@ -53,7 +53,8 @@ RunnableInterface::~RunnableInterface() // Aspect task AspectTaskRunnable::AspectTaskRunnable() - : m_dependencyHandler(0) + : m_dependencyHandler(0), + m_reserved(false) { } @@ -66,12 +67,8 @@ void AspectTaskRunnable::run() if (m_job) m_job->run(); - QVector freedTasks; - if (m_dependencyHandler) - freedTasks = m_dependencyHandler->freeDependencies(this); - if (m_pooler) - m_pooler->taskFinished(freedTasks); + m_pooler->taskFinished(this); } void AspectTaskRunnable::setDependencyHandler(DependencyHandler *handler) @@ -91,7 +88,8 @@ SyncTaskRunnable::SyncTaskRunnable(QAbstractAspectJobManager::JobFunction func, : m_func(func), m_arg(arg), m_atomicCount(atomicCount), - m_pooler(Q_NULLPTR) + m_pooler(Q_NULLPTR), + m_reserved(false) { } @@ -112,7 +110,7 @@ void SyncTaskRunnable::run() QThread::currentThread()->yieldCurrentThread(); if (m_pooler) - m_pooler->taskFinished(QVector()); + m_pooler->taskFinished(this); } void SyncTaskRunnable::setDependencyHandler(DependencyHandler *handler) -- cgit v1.2.3