Index: src/libchcore/TFailedBufferQueue.h =================================================================== diff -u -N -r3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9 -r6e4ac7776b68464371cd8522a2a8d79fbcab3b28 --- src/libchcore/TFailedBufferQueue.h (.../TFailedBufferQueue.h) (revision 3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9) +++ src/libchcore/TFailedBufferQueue.h (.../TFailedBufferQueue.h) (revision 6e4ac7776b68464371cd8522a2a8d79fbcab3b28) @@ -22,6 +22,8 @@ #include #include "TEvent.h" #include "TOverlappedDataBuffer.h" +#include "TCoreException.h" +#include "TBufferList.h" namespace chcore { @@ -51,7 +53,11 @@ if(pBuf->HasError()) rRetryQueue.Push(pBuf, true); else - newQueue.insert(pBuf); + { + auto pairInsert = newQueue.insert(pBuf); + if (!pairInsert.second) + throw TCoreException(eErr_InvalidArgument, L"Tried to insert duplicate buffer into the collection", LOCATION); + } } if(newQueue.size() != m_setBuffers.size()) @@ -72,7 +78,10 @@ m_ullErrorPosition = NoPosition; } - m_setBuffers.insert(pBuffer); + auto pairInsert = m_setBuffers.insert(pBuffer); + if (!pairInsert.second) + throw TCoreException(eErr_InvalidArgument, L"Tried to insert duplicate buffer into the collection", LOCATION); + UpdateHasBuffers(); } @@ -85,6 +94,7 @@ bool IsEmpty() const; HANDLE GetHasBuffersEvent() const; + void ReleaseBuffers(const TBufferListPtr& spBuffers); private: bool IsBufferReady() const;