Index: src/libchcore/TTaskManager.cpp =================================================================== diff -u -N -ra44714d5c7ec0f50a376f4d0ea919ee5a224f834 -ra99c8baeb8f6c237603df46c0f5c4cf943152c09 --- src/libchcore/TTaskManager.cpp (.../TTaskManager.cpp) (revision a44714d5c7ec0f50a376f4d0ea919ee5a224f834) +++ src/libchcore/TTaskManager.cpp (.../TTaskManager.cpp) (revision a99c8baeb8f6c237603df46c0f5c4cf943152c09) @@ -140,8 +140,6 @@ void TTaskManager::RemoveAllFinished() { - std::vector vTasksSerializersToRemove; - // separate scope for locking { boost::unique_lock lock(m_lock); @@ -163,23 +161,17 @@ spTask->OnUnregisterTask(); - vTasksSerializersToRemove.push_back(spTask->GetSerializer()->GetLocation().ToWString()); + m_tObsoleteFiles.DeleteObsoleteFile(spTask->GetSerializer()->GetLocation()); + m_tObsoleteFiles.DeleteObsoleteFile(spTask->GetLogPath()); + m_tTasks.RemoveAt(stIndex); } } } - - BOOST_FOREACH(const TString& strSerializerPath, vTasksSerializersToRemove) - { - // delete associated files - DeleteFile(strSerializerPath.c_str()); - } } void TTaskManager::RemoveFinished(const TTaskPtr& spSelTask) { - std::vector vTasksToRemove; - // separate scope for locking { boost::unique_lock lock(m_lock); @@ -203,19 +195,15 @@ spTask->OnUnregisterTask(); - vTasksToRemove.push_back(rEntry.GetTaskSerializeLocation()); + m_tObsoleteFiles.DeleteObsoleteFile(spTask->GetSerializer()->GetLocation()); + m_tObsoleteFiles.DeleteObsoleteFile(spTask->GetLogPath()); + m_tTasks.RemoveAt(stIndex); } break; } } } - - BOOST_FOREACH(const TSmartPath& spTaskPath, vTasksToRemove) - { - // delete associated files - DeleteFile(spTaskPath.ToString()); - } } void TTaskManager::StopAllTasks() @@ -442,10 +430,10 @@ { TSimpleTimer timer(true); - ISerializerContainerPtr spContainer = m_spSerializer->GetContainer(_T("tasks")); - // store this container information { + ISerializerContainerPtr spContainer = m_spSerializer->GetContainer(_T("tasks")); + boost::shared_lock lock(m_lock); m_tTasks.Store(spContainer); @@ -456,6 +444,14 @@ } } + // store obsolete info + { + ISerializerContainerPtr spContainer = m_spSerializer->GetContainer(_T("obsolete_tasks")); + + boost::shared_lock lock(m_lock); + m_tObsoleteFiles.Store(spContainer); + } + unsigned long long ullGatherTime = timer.Checkpoint(); ullGatherTime; m_spSerializer->Flush(); @@ -477,6 +473,14 @@ m_tTasks.Load(spContainer); } + // load list of task files to delete + { + boost::unique_lock lock(m_lock); + + ISerializerContainerPtr spContainer = m_spSerializer->GetContainer(_T("obsolete_tasks")); + m_tObsoleteFiles.Load(spContainer); // loader also tries to delete files + } + // retrieve information about tasks to load std::vector > vObjects; {