Index: src/libchcore/TOverlappedReaderFB.cpp =================================================================== diff -u -N -r7892d3d5ca43da7dca4d9e8e0c321c21c3e13ea0 -r3d7d129eda4a42e9f9318ae6b6f3b873dc9290d4 --- src/libchcore/TOverlappedReaderFB.cpp (.../TOverlappedReaderFB.cpp) (revision 7892d3d5ca43da7dca4d9e8e0c321c21c3e13ea0) +++ src/libchcore/TOverlappedReaderFB.cpp (.../TOverlappedReaderFB.cpp) (revision 3d7d129eda4a42e9f9318ae6b6f3b873dc9290d4) @@ -37,13 +37,14 @@ bool bNoBuffering, bool bProtectReadOnlyFiles) : m_spReader(std::make_shared(spLogFileData, spEmptyBuffers, spDataRange, dwChunkSize)), + m_eventReadingFinished(true, false), + m_eventProcessingFinished(true, false), + m_counterOnTheFly(), m_spFilesystem(spFilesystem), + m_spSrcFileInfo(spSrcFileInfo), m_spSrcFile(), m_spStats(spStats), - m_spSrcFileInfo(spSrcFileInfo), - m_rThreadController(rThreadController), - m_eventReadingFinished(true, false), - m_eventProcessingFinished(true, false) + m_rThreadController(rThreadController) { if(!spFeedbackHandler) throw TCoreException(eErr_InvalidArgument, L"spFeedbackHandler is NULL", LOCATION); @@ -177,12 +178,28 @@ return m_eventProcessingFinished.Handle(); } + void TOverlappedReaderFB::QueueProcessedBuffer(TOverlappedDataBuffer* pBuffer) + { + if(!pBuffer) + throw TCoreException(eErr_InvalidArgument, L"pBuffer is NULL", LOCATION); + + if(pBuffer->HasError()) + m_spReader->AddFailedReadBuffer(pBuffer); + else + m_spReader->AddFinishedReadBuffer(pBuffer); + + m_counterOnTheFly.Decrease(); + } + TSubTaskBase::ESubOperationResult TOverlappedReaderFB::OnReadPossible() { TOverlappedDataBuffer* pBuffer = m_spReader->GetEmptyBuffer(); if(!pBuffer) throw TCoreException(eErr_InternalProblem, L"Read was possible, but no buffer is available", LOCATION); + m_counterOnTheFly.Increase(); + + pBuffer->SetParam(this); TSubTaskBase::ESubOperationResult eResult = m_spSrcFile->ReadFileFB(*pBuffer); if(eResult != TSubTaskBase::eSubResult_Continue) m_spReader->AddEmptyBuffer(pBuffer);