Index: src/libchengine/FeedbackManager.cpp =================================================================== diff -u -rf01ed9a0279a52c96a7272273ef19e57f7670f4a -r3993a75a24145732742d61be638111d1d85c367b --- src/libchengine/FeedbackManager.cpp (.../FeedbackManager.cpp) (revision f01ed9a0279a52c96a7272273ef19e57f7670f4a) +++ src/libchengine/FeedbackManager.cpp (.../FeedbackManager.cpp) (revision 3993a75a24145732742d61be638111d1d85c367b) @@ -63,19 +63,23 @@ if(eResult == eResult_Unknown) { - FeedbackErrorRuleList newRules; + FeedbackRules modRules; { + boost::shared_lock lock(m_lock); + modRules = m_feedbackRules; + } + { TScopedRunningTimeTrackerPause scopedTimePause(m_pTimeTracker); TScopedRunningTimeTrackerPause scopedSecondaryTimePause(m_pSecondaryTimeTracker); - eResult = m_spFeedbackHandler->FileError(strSrcPath, strDstPath, eFileError, ulError, newRules); + eResult = m_spFeedbackHandler->FileError(strSrcPath, strDstPath, eFileError, ulError, modRules); } if(eResult != eResult_Unknown) { bAutomatedResponse = false; - if(!newRules.IsEmpty()) + { boost::unique_lock lock(m_lock); - m_feedbackRules.GetErrorRules().Merge(newRules); + m_feedbackRules = modRules; } } } @@ -137,19 +141,23 @@ } if(eResult == eResult_Unknown) { - FeedbackNotEnoughSpaceRuleList newRules; + FeedbackRules modRules; { + boost::shared_lock lock(m_lock); + modRules = m_feedbackRules; + } + { TScopedRunningTimeTrackerPause scopedTimePause(m_pTimeTracker); TScopedRunningTimeTrackerPause scopedSecondaryTimePause(m_pSecondaryTimeTracker); - eResult = m_spFeedbackHandler->NotEnoughSpace(strSrcPath, strDstPath, ullRequiredSize, newRules); + eResult = m_spFeedbackHandler->NotEnoughSpace(strSrcPath, strDstPath, ullRequiredSize, modRules); } if(eResult != eResult_Unknown) { bAutomatedResponse = false; - if(!newRules.IsEmpty()) + { boost::unique_lock lock(m_lock); - m_feedbackRules.GetNotEnoughSpaceRules().Merge(newRules); + m_feedbackRules = modRules; } } } @@ -168,19 +176,22 @@ } if(eResult == eResult_Unknown) { - FeedbackOperationEventRuleList newRules; + FeedbackRules modRules; { + boost::shared_lock lock(m_lock); + modRules = m_feedbackRules; + } + { TScopedRunningTimeTrackerPause scopedTimePause(m_pTimeTracker); TScopedRunningTimeTrackerPause scopedSecondaryTimePause(m_pSecondaryTimeTracker); - eResult = m_spFeedbackHandler->OperationEvent(eEvent, newRules); + eResult = m_spFeedbackHandler->OperationEvent(eEvent, modRules); } if(eResult != eResult_Unknown) { bAutomatedResponse = false; - if(!newRules.IsEmpty()) { boost::unique_lock lock(m_lock); - m_feedbackRules.GetOperationEventRules().Merge(newRules); + m_feedbackRules = modRules; } } }