Index: src/libchcore/TWriteBufferQueueWrapper.cpp
===================================================================
diff -u -N -r6e4ac7776b68464371cd8522a2a8d79fbcab3b28 -rb6a48931b8155a01d871d050f52d915abb2df8ca
--- src/libchcore/TWriteBufferQueueWrapper.cpp	(.../TWriteBufferQueueWrapper.cpp)	(revision 6e4ac7776b68464371cd8522a2a8d79fbcab3b28)
+++ src/libchcore/TWriteBufferQueueWrapper.cpp	(.../TWriteBufferQueueWrapper.cpp)	(revision b6a48931b8155a01d871d050f52d915abb2df8ca)
@@ -27,6 +27,9 @@
 		m_spDataQueue(spQueue),
 		m_eventHasBuffers(true, false)
 	{
+		if (!spQueue)
+			throw TCoreException(eErr_InvalidArgument, L"spQueue is NULL", LOCATION);
+
 		UpdateHasBuffers();
 	}
 
@@ -41,10 +44,7 @@
 
 	TOverlappedDataBuffer* TWriteBufferQueueWrapper::Pop()
 	{
-		TOverlappedDataBuffer* pBuffer = m_tClaimedQueue.Pop();
-		if(!pBuffer)
-			pBuffer = m_spDataQueue->Pop();
-
+		TOverlappedDataBuffer* pBuffer = InternalPop();
 		if(pBuffer)
 		{
 			pBuffer->InitForWrite();
@@ -54,6 +54,22 @@
 		return pBuffer;
 	}
 
+	TOverlappedDataBuffer* TWriteBufferQueueWrapper::InternalPop()
+	{
+		const TOverlappedDataBuffer* pClaimedQueueBuffer = m_tClaimedQueue.Peek();
+		if (!pClaimedQueueBuffer)
+			return m_spDataQueue->Pop();
+
+		const TOverlappedDataBuffer* pDataQueueBuffer = m_spDataQueue->Peek();
+		if (!pDataQueueBuffer)
+			return m_tClaimedQueue.Pop();
+
+		if (pClaimedQueueBuffer->GetFilePosition() < pDataQueueBuffer->GetFilePosition())
+			return m_tClaimedQueue.Pop();
+		else
+			return m_spDataQueue->Pop();
+	}
+
 	bool TWriteBufferQueueWrapper::IsBufferReady() const
 	{
 		return !m_tClaimedQueue.IsEmpty() || !m_spDataQueue->IsEmpty();