Index: src/libchengine/TSubTaskCopyMove.cpp =================================================================== diff -u -N -r301444777085263aae7aff911dd56722f302597e -r08717141ce5f6926116c298cbc9442094a45bb67 --- src/libchengine/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision 301444777085263aae7aff911dd56722f302597e) +++ src/libchengine/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision 08717141ce5f6926116c298cbc9442094a45bb67) @@ -33,7 +33,6 @@ #include "TFileInfo.h" #include "TFileInfoArray.h" #include "TScopedRunningTimeTracker.h" -#include "TFeedbackHandlerWrapper.h" #include "TOverlappedMemoryPool.h" #include "TTaskConfigBufferSizes.h" #include "TFilesystemFeedbackWrapper.h" @@ -42,6 +41,7 @@ #include "TThreadedQueueRunner.h" #include "TOverlappedThreadPool.h" #include "../libchcore/RoundingFunctions.h" +#include using namespace chcore; using namespace string; @@ -98,11 +98,16 @@ m_spSubTaskStats->SetCurrentPath(spFileInfo->GetFullFilePath().ToString()); } - TSubTaskBase::ESubOperationResult TSubTaskCopyMove::Exec(const IFeedbackHandlerPtr& spFeedback) + TSubTaskBase::ESubOperationResult TSubTaskCopyMove::Exec() { TScopedRunningTimeTracker guard(*m_spSubTaskStats); - TFeedbackHandlerWrapperPtr spFeedbackHandler(std::make_shared(spFeedback, guard)); + FeedbackManagerPtr spFeedbackManager = GetContext().GetFeedbackManager(); + spFeedbackManager->SetSecondaryTimeTracker(&guard); + BOOST_SCOPE_EXIT(&spFeedbackManager) { + spFeedbackManager->SetSecondaryTimeTracker(nullptr); + } BOOST_SCOPE_EXIT_END + TFileInfoArray& rFilesCache = GetContext().GetFilesCache(); TTaskConfigTracker& rCfgTracker = GetContext().GetCfgTracker(); TWorkerThreadController& rThreadController = GetContext().GetThreadController(); @@ -111,7 +116,7 @@ IFilesystemPtr spFilesystem = GetContext().GetLocalFilesystem(); TBasePathDataContainerPtr spSrcPaths = GetContext().GetBasePaths(); - TFilesystemFeedbackWrapper tFilesystemFBWrapper(spFeedbackHandler, spFilesystem, GetContext().GetLogFileData(), rThreadController); + TFilesystemFeedbackWrapper tFilesystemFBWrapper(spFeedbackManager, spFilesystem, GetContext().GetLogFileData(), rThreadController); // log LOG_INFO(m_spLog) << _T("Processing files/folders (ProcessFiles)"); @@ -230,7 +235,7 @@ ccp.spSrcFile = spFileInfo; // copy data - eResult = CustomCopyFileFB(spFeedbackHandler, threadPool, &ccp); + eResult = CustomCopyFileFB(spFeedbackManager, threadPool, &ccp); if (eResult == eSubResult_SkipFile) { spFileInfo->MarkAsProcessed(false); @@ -338,7 +343,7 @@ } } - TSubTaskBase::ESubOperationResult TSubTaskCopyMove::CustomCopyFileFB(const IFeedbackHandlerPtr& spFeedbackHandler, + TSubTaskBase::ESubOperationResult TSubTaskCopyMove::CustomCopyFileFB(const FeedbackManagerPtr& spFeedbackManager, TOverlappedThreadPool& rThreadPool, CUSTOM_COPY_PARAMS* pData) { @@ -368,7 +373,7 @@ unsigned long long ullNextReadPos = m_spSubTaskStats->GetCurrentItemProcessedSize(); TOverlappedReaderWriterFB tReaderWriter(spFilesystem, - spFeedbackHandler, + spFeedbackManager, rThreadController, rThreadPool, pData->spSrcFile,