Index: src/libchcore/TOverlappedReaderFB.cpp =================================================================== diff -u -rc175b6c9d5be6ee6ee0eae90abb167b9eaf2abc3 -r518d1a3484cde91ff17c071211df5e40cb3487e3 --- src/libchcore/TOverlappedReaderFB.cpp (.../TOverlappedReaderFB.cpp) (revision c175b6c9d5be6ee6ee0eae90abb167b9eaf2abc3) +++ src/libchcore/TOverlappedReaderFB.cpp (.../TOverlappedReaderFB.cpp) (revision 518d1a3484cde91ff17c071211df5e40cb3487e3) @@ -72,7 +72,9 @@ TSubTaskBase::ESubOperationResult TOverlappedReaderFB::StopThreaded() { - WaitForSingleObjectEx(m_eventProcessingFinished.Handle(), INFINITE, FALSE); + DWORD dwResult = WaitForSingleObjectEx(m_eventProcessingFinished.Handle(), INFINITE, FALSE); + _ASSERTE(dwResult == WAIT_OBJECT_0); dwResult; + return m_eThreadResult; } @@ -155,18 +157,24 @@ void TOverlappedReaderFB::WaitForOnTheFlyBuffers() { - DWORD dwResult = WaitForSingleObjectEx(m_counterOnTheFly.GetEventHandle(), INFINITE, TRUE); - switch(dwResult) + bool bStop = false; + do { - case STATUS_USER_APC: - break; + DWORD dwResult = WaitForSingleObjectEx(m_counterOnTheFly.GetEventHandle(), INFINITE, TRUE); + switch(dwResult) + { + case STATUS_USER_APC: + break; - case WAIT_OBJECT_0: - return; + case WAIT_OBJECT_0: + bStop = true; + break; - default: - throw TCoreException(eErr_UnhandledCase, L"Unknown result from async waiting function", LOCATION); + default: + throw TCoreException(eErr_UnhandledCase, L"Unknown result from async waiting function", LOCATION); + } } + while(!bStop); } void TOverlappedReaderFB::ClearQueues()