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<boost::shared_mutex> 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;
 		}