Index: src/libchcore/TOverlappedWriterFB.cpp =================================================================== diff -u -N -rc175b6c9d5be6ee6ee0eae90abb167b9eaf2abc3 -r518d1a3484cde91ff17c071211df5e40cb3487e3 --- src/libchcore/TOverlappedWriterFB.cpp (.../TOverlappedWriterFB.cpp) (revision c175b6c9d5be6ee6ee0eae90abb167b9eaf2abc3) +++ src/libchcore/TOverlappedWriterFB.cpp (.../TOverlappedWriterFB.cpp) (revision 518d1a3484cde91ff17c071211df5e40cb3487e3) @@ -355,23 +355,31 @@ void TOverlappedWriterFB::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); } TSubTaskBase::ESubOperationResult TOverlappedWriterFB::StopThreaded() { - WaitForSingleObjectEx(m_eventProcessingFinished.Handle(), INFINITE, FALSE); + DWORD dwResult = WaitForSingleObjectEx(m_eventProcessingFinished.Handle(), INFINITE, FALSE); + _ASSERTE(dwResult == WAIT_OBJECT_0); dwResult; + return m_eThreadResult; } }