Index: src/libchcore/TOverlappedReaderFB.cpp
===================================================================
diff -u -N -rb0a003dc39e6d21e34779cf1cf5d8a07318c1f5f -r7892d3d5ca43da7dca4d9e8e0c321c21c3e13ea0
--- src/libchcore/TOverlappedReaderFB.cpp	(.../TOverlappedReaderFB.cpp)	(revision b0a003dc39e6d21e34779cf1cf5d8a07318c1f5f)
+++ src/libchcore/TOverlappedReaderFB.cpp	(.../TOverlappedReaderFB.cpp)	(revision 7892d3d5ca43da7dca4d9e8e0c321c21c3e13ea0)
@@ -21,6 +21,7 @@
 #include "TCoreException.h"
 #include "TFileInfo.h"
 #include "TWorkerThreadController.h"
+#include "TEventGuard.h"
 
 namespace chcore
 {
@@ -41,7 +42,8 @@
 		m_spStats(spStats),
 		m_spSrcFileInfo(spSrcFileInfo),
 		m_rThreadController(rThreadController),
-		m_eventDataSourceFinished(true, false)
+		m_eventReadingFinished(true, false),
+		m_eventProcessingFinished(true, false)
 	{
 		if(!spFeedbackHandler)
 			throw TCoreException(eErr_InvalidArgument, L"spFeedbackHandler is NULL", LOCATION);
@@ -78,6 +80,8 @@
 
 	void TOverlappedReaderFB::StartThreaded()
 	{
+		TEventGuard guardProcessingFinished(m_eventProcessingFinished, true);
+
 		m_eThreadResult = TSubTaskBase::eSubResult_Continue;
 
 		// read data from file to buffer
@@ -121,7 +125,7 @@
 
 			case WAIT_OBJECT_0 + eDataSourceFinished:
 				m_eThreadResult = TSubTaskBase::eSubResult_Continue;
-				m_eventDataSourceFinished.SetEvent();
+				m_eventReadingFinished.SetEvent();
 				return;
 
 			default:
@@ -163,11 +167,16 @@
 		m_spReader->ReleaseBuffers();
 	}
 
-	HANDLE TOverlappedReaderFB::GetEventDataSourceFinishedHandle() const
+	HANDLE TOverlappedReaderFB::GetEventReadingFinishedHandle() const
 	{
-		return m_eventDataSourceFinished.Handle();
+		return m_eventReadingFinished.Handle();
 	}
 
+	HANDLE TOverlappedReaderFB::GetEventProcessingFinishedHandle() const
+	{
+		return m_eventProcessingFinished.Handle();
+	}
+
 	TSubTaskBase::ESubOperationResult TOverlappedReaderFB::OnReadPossible()
 	{
 		TOverlappedDataBuffer* pBuffer = m_spReader->GetEmptyBuffer();