Index: src/libchcore/TOverlappedReaderWriterFB.cpp
===================================================================
diff -u -rb051cbac8dac8c448507aa7c64753af9cf793af5 -rc719644bb4360fcf7ccf6f1139bcae852bd6effd
--- src/libchcore/TOverlappedReaderWriterFB.cpp	(.../TOverlappedReaderWriterFB.cpp)	(revision b051cbac8dac8c448507aa7c64753af9cf793af5)
+++ src/libchcore/TOverlappedReaderWriterFB.cpp	(.../TOverlappedReaderWriterFB.cpp)	(revision c719644bb4360fcf7ccf6f1139bcae852bd6effd)
@@ -57,33 +57,8 @@
 	{
 	}
 
-	void TOverlappedReaderWriterFB::WaitForMissingBuffersAndResetState()
+	TSubTaskBase::ESubOperationResult TOverlappedReaderWriterFB::Process()
 	{
-		bool bStopProcessing = false;
-		while(!bStopProcessing)
-		{
-			DWORD dwResult = WaitForSingleObjectEx(m_spMemoryPool->GetBufferList()->GetAllBuffersAccountedForEvent(), INFINITE, TRUE);
-			switch(dwResult)
-			{
-			case STATUS_USER_APC:
-				break;
-
-			case WAIT_OBJECT_0:
-			{
-				LOG_DEBUG(m_spLog) << L"All buffer accounted for.";
-
-				bStopProcessing = true;
-				break;
-			}
-
-			default:
-				throw TCoreException(eErr_UnhandledCase, L"Unknown result from async waiting function", LOCATION);
-			}
-		}
-	}
-
-	TSubTaskBase::ESubOperationResult TOverlappedReaderWriterFB::Start()
-	{
 		TSubTaskBase::ESubOperationResult eResult = m_spReader->Start();
 		if(eResult != TSubTaskBase::eSubResult_Continue)
 			return eResult;
@@ -146,7 +121,9 @@
 			}
 		}
 
-		WaitForMissingBuffersAndResetState();
+		// ensure that no buffer was lost in the process
+		if(!m_spMemoryPool->GetBufferList()->AreAllBuffersAccountedFor())
+			throw TCoreException(eErr_InternalProblem, L"", LOCATION);
 
 		return eResult;
 	}