diff --git a/src/lib/utility/scheduling/TaskGroupParallel.cpp b/src/lib/utility/scheduling/TaskGroupParallel.cpp index befde6ce..966ccbba 100644 --- a/src/lib/utility/scheduling/TaskGroupParallel.cpp +++ b/src/lib/utility/scheduling/TaskGroupParallel.cpp @@ -26,12 +26,11 @@ void TaskGroupParallel::doEnter(std::shared_ptr blackboard) if (m_needsToStartThreads) { m_needsToStartThreads = false; - m_activeTaskCount = 0; + m_activeTaskCount = m_tasks.size(); for (size_t i = 0; i < m_tasks.size(); i++) { - m_tasks[i]->thread = std::make_shared(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard); m_tasks[i]->active = true; - m_activeTaskCount++; + m_tasks[i]->thread = std::make_shared(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard); } } } @@ -65,10 +64,13 @@ void TaskGroupParallel::doReset(std::shared_ptr blackboard) m_tasks[i]->taskRunner->reset(); if (!m_tasks[i]->active) { + { + std::lock_guard lock(m_activeTaskCountMutex); + m_activeTaskCount++; + } m_tasks[i]->thread->join(); - m_tasks[i]->thread = std::make_shared(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard); m_tasks[i]->active = true; - m_activeTaskCount++; + m_tasks[i]->thread = std::make_shared(&TaskGroupParallel::processTaskThreaded, this, m_tasks[i], blackboard); } } }