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 <set>
 #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;