Index: src/libchcore/TOverlappedReaderWriterFB.cpp =================================================================== diff -u -N -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; }