Index: src/libchcore/TOverlappedReaderWriterFB.cpp =================================================================== diff -u -N -r3d7d129eda4a42e9f9318ae6b6f3b873dc9290d4 -rb051cbac8dac8c448507aa7c64753af9cf793af5 --- src/libchcore/TOverlappedReaderWriterFB.cpp (.../TOverlappedReaderWriterFB.cpp) (revision 3d7d129eda4a42e9f9318ae6b6f3b873dc9290d4) +++ src/libchcore/TOverlappedReaderWriterFB.cpp (.../TOverlappedReaderWriterFB.cpp) (revision b051cbac8dac8c448507aa7c64753af9cf793af5) @@ -20,7 +20,6 @@ #include "TOverlappedReaderWriterFB.h" #include "TCoreException.h" #include "ErrorCodes.h" -#include #include "TWorkerThreadController.h" #include "TOverlappedThreadPool.h" #include "TCoreWin32Exception.h" @@ -58,66 +57,29 @@ { } - TSubTaskBase::ESubOperationResult TOverlappedReaderWriterFB::WaitForMissingBuffersAndResetState() + void TOverlappedReaderWriterFB::WaitForMissingBuffersAndResetState() { - m_spReader->SetReleaseMode(); - m_spWriter->SetReleaseMode(); - - enum - { - eAllBuffersAccountedFor, eWriteFinished, eWriteFailed, eWritePossible, eHandleCount - }; - std::array arrHandles = { - m_spMemoryPool->GetBufferList()->GetAllBuffersAccountedForEvent(), - m_spWriter->GetWriter()->GetEventWriteFinishedHandle(), - m_spWriter->GetWriter()->GetEventWriteFailedHandle(), - m_spWriter->GetWriter()->GetEventWritePossibleHandle() - }; - - TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue; bool bStopProcessing = false; while(!bStopProcessing) { - DWORD dwResult = WaitForMultipleObjectsEx(eHandleCount, arrHandles.data(), false, INFINITE, true); + DWORD dwResult = WaitForSingleObjectEx(m_spMemoryPool->GetBufferList()->GetAllBuffersAccountedForEvent(), INFINITE, TRUE); switch(dwResult) { case STATUS_USER_APC: break; - case WAIT_OBJECT_0 + eAllBuffersAccountedFor: + case WAIT_OBJECT_0: { LOG_DEBUG(m_spLog) << L"All buffer accounted for."; - eResult = TSubTaskBase::eSubResult_KillRequest; bStopProcessing = true; break; } - case WAIT_OBJECT_0 + eWritePossible: - { - m_spWriter->OnWritePossible(); - break; - } - - case WAIT_OBJECT_0 + eWriteFailed: - { - m_spWriter->OnWriteFailed(); - break; - } - - case WAIT_OBJECT_0 + eWriteFinished: - { - bool bIgnoreStop = false; - m_spWriter->OnWriteFinished(bIgnoreStop); - break; - } - default: throw TCoreException(eErr_UnhandledCase, L"Unknown result from async waiting function", LOCATION); } } - - return eResult; } TSubTaskBase::ESubOperationResult TOverlappedReaderWriterFB::Start()