Index: src/libchcore/TSimpleOrderedBufferQueue.h
===================================================================
diff -u -N -rc719644bb4360fcf7ccf6f1139bcae852bd6effd -rd99302fce795dbb5139659016a5da7948f141fb4
--- src/libchcore/TSimpleOrderedBufferQueue.h	(.../TSimpleOrderedBufferQueue.h)	(revision c719644bb4360fcf7ccf6f1139bcae852bd6effd)
+++ src/libchcore/TSimpleOrderedBufferQueue.h	(.../TSimpleOrderedBufferQueue.h)	(revision d99302fce795dbb5139659016a5da7948f141fb4)
@@ -23,18 +23,24 @@
 #include "TCoreException.h"
 #include "TOverlappedDataBuffer.h"
 #include "TBufferList.h"
+#include "TSharedCount.h"
 
 namespace chcore
 {
 	class TSimpleOrderedBufferQueue : private std::set<TOverlappedDataBuffer*, CompareBufferPositions>
 	{
 	public:
+		TSimpleOrderedBufferQueue() : m_spCount(std::make_shared<TSharedCount<size_t>>())
+		{
+		}
+
 		void Push(TOverlappedDataBuffer* pBuffer)
 		{
 			if(!pBuffer)
 				throw TCoreException(eErr_InvalidArgument, L"pBuffer is NULL", LOCATION);
 			if(!insert(pBuffer).second)
 				throw TCoreException(eErr_InvalidArgument, L"Buffer already exists in the collection", LOCATION);
+			m_spCount->Increase();
 		}
 
 		TOverlappedDataBuffer* Pop()
@@ -44,6 +50,8 @@
 			TOverlappedDataBuffer* pBuffer = *begin();
 			erase(begin());
 
+			m_spCount->Decrease();
+
 			return pBuffer;
 		}
 
@@ -64,6 +72,8 @@
 				spBuffers->Push(pBuffer);
 			}
 			clear();
+
+			m_spCount->SetValue(0);
 		}
 
 		bool IsEmpty() const
@@ -73,8 +83,16 @@
 
 		size_t GetCount() const
 		{
-			return size();
+			return m_spCount->GetValue();
 		}
+
+		TSharedCountPtr<size_t> GetSharedCount()
+		{
+			return m_spCount;
+		}
+
+	private:
+		TSharedCountPtr<size_t> m_spCount;
 	};
 }