Index: src/libchcore/TOrderedBufferQueue.cpp =================================================================== diff -u -N -rb051cbac8dac8c448507aa7c64753af9cf793af5 -r518d1a3484cde91ff17c071211df5e40cb3487e3 --- src/libchcore/TOrderedBufferQueue.cpp (.../TOrderedBufferQueue.cpp) (revision b051cbac8dac8c448507aa7c64753af9cf793af5) +++ src/libchcore/TOrderedBufferQueue.cpp (.../TOrderedBufferQueue.cpp) (revision 518d1a3484cde91ff17c071211df5e40cb3487e3) @@ -25,14 +25,22 @@ namespace chcore { - TOrderedBufferQueue::TOrderedBufferQueue(unsigned long long ullExpectedPosition) : + TOrderedBufferQueue::TOrderedBufferQueue(const TBufferListPtr& spEmptyBuffers, unsigned long long ullExpectedPosition) : + m_spEmptyBuffers(spEmptyBuffers), m_eventHasBuffers(true, false), m_eventHasError(true, false), m_eventHasReadingFinished(true, false), m_ullExpectedBufferPosition(ullExpectedPosition) { + if(!spEmptyBuffers) + throw TCoreException(eErr_InvalidArgument, L"spEmptyBuffers is NULL", LOCATION); } + TOrderedBufferQueue::~TOrderedBufferQueue() + { + ClearBuffers(); + } + void TOrderedBufferQueue::Push(TOverlappedDataBuffer* pBuffer) { if(!pBuffer) @@ -146,22 +154,19 @@ return m_eventHasReadingFinished.Handle(); } - void TOrderedBufferQueue::ClearBuffers(const TBufferListPtr& spBuffers) + void TOrderedBufferQueue::ClearBuffers() { - if(!spBuffers) - throw TCoreException(eErr_InvalidArgument, L"spBuffers is NULL", LOCATION); - boost::unique_lock lock(m_mutex); for(TOverlappedDataBuffer* pBuffer : m_setBuffers) { - spBuffers->Push(pBuffer); + m_spEmptyBuffers->Push(pBuffer); } m_setBuffers.clear(); if(m_pFirstErrorBuffer) { - spBuffers->Push(m_pFirstErrorBuffer); + m_spEmptyBuffers->Push(m_pFirstErrorBuffer); m_pFirstErrorBuffer = nullptr; m_ullErrorPosition = NoPosition; }