Index: src/libchcore/TReadBufferQueueWrapper.cpp =================================================================== diff -u -N -r3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9 -r6e4ac7776b68464371cd8522a2a8d79fbcab3b28 --- src/libchcore/TReadBufferQueueWrapper.cpp (.../TReadBufferQueueWrapper.cpp) (revision 3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9) +++ src/libchcore/TReadBufferQueueWrapper.cpp (.../TReadBufferQueueWrapper.cpp) (revision 6e4ac7776b68464371cd8522a2a8d79fbcab3b28) @@ -19,6 +19,7 @@ #include "stdafx.h" #include "TReadBufferQueueWrapper.h" #include "TOverlappedDataBuffer.h" +#include "TCoreException.h" namespace chcore { @@ -28,10 +29,14 @@ m_dwChunkSize(dwChunkSize), m_eventHasBuffers(true, false) { + UpdateHasBuffers(); } void TReadBufferQueueWrapper::Push(TOverlappedDataBuffer* pBuffer, bool bKeepPosition) { + if (!pBuffer) + throw TCoreException(eErr_InvalidPointer, L"pBuffer", LOCATION); + if(!bKeepPosition) { if(IsDataSourceFinished()) @@ -100,7 +105,7 @@ size_t TReadBufferQueueWrapper::GetCount() const { - return m_spUnorderedQueue->GetCount(); + return m_tClaimedQueue.GetCount(); } bool TReadBufferQueueWrapper::IsEmpty() const @@ -116,6 +121,7 @@ { m_ullDataSourceFinishedPos = pBuffer->GetFilePosition(); // #todo: release excessive claimed buffers + UpdateHasBuffers(); } } } @@ -134,4 +140,9 @@ { m_eventHasBuffers.SetEvent(IsBufferReady()); } + + void TReadBufferQueueWrapper::ReleaseBuffers(const TBufferListPtr& spBuffers) + { + m_tClaimedQueue.ReleaseBuffers(spBuffers); + } }