Index: src/libchcore/TSubTaskArray.cpp =================================================================== diff -u -N -rfa1b35a5012ef3fad361edfacd9a627631d55e07 -r3b320bc86d4e808c2f6a70c10bd5c9936102b301 --- src/libchcore/TSubTaskArray.cpp (.../TSubTaskArray.cpp) (revision fa1b35a5012ef3fad361edfacd9a627631d55e07) +++ src/libchcore/TSubTaskArray.cpp (.../TSubTaskArray.cpp) (revision 3b320bc86d4e808c2f6a70c10bd5c9936102b301) @@ -113,6 +113,20 @@ } } + void TSubTasksArray::InitBeforeExec() + { + object_id_t oidSize = boost::numeric_cast(m_vSubTasks.size()); + object_id_t oidIndex = m_oidSubOperationIndex.load(std::memory_order_acquire); + + if(oidIndex < oidSize) + { + std::pair& rCurrentSubTask = m_vSubTasks.at(boost::numeric_cast(oidIndex)); + TSubTaskBasePtr spCurrentSubTask = rCurrentSubTask.first; + + spCurrentSubTask->InitBeforeExec(); + } + } + TSubTaskBase::ESubOperationResult TSubTasksArray::Execute(const IFeedbackHandlerPtr& spFeedbackHandler, bool bRunOnlyEstimationSubTasks) { TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue; @@ -125,6 +139,8 @@ std::pair& rCurrentSubTask = m_vSubTasks.at(boost::numeric_cast(oidIndex)); TSubTaskBasePtr spCurrentSubTask = rCurrentSubTask.first; + spCurrentSubTask->InitBeforeExec(); + // if we run in estimation mode only, then stop processing and return to the caller if (bRunOnlyEstimationSubTasks && !rCurrentSubTask.second) {