Index: src/libchcore/TWriteBufferQueueWrapper.cpp
===================================================================
diff -u -N -rda7737de7046ba0ecd255240fb36b4a46584ebf2 -rb941384e121190b6107f1c99b3233667e3daf4ce
--- src/libchcore/TWriteBufferQueueWrapper.cpp	(.../TWriteBufferQueueWrapper.cpp)	(revision da7737de7046ba0ecd255240fb36b4a46584ebf2)
+++ src/libchcore/TWriteBufferQueueWrapper.cpp	(.../TWriteBufferQueueWrapper.cpp)	(revision b941384e121190b6107f1c99b3233667e3daf4ce)
@@ -31,8 +31,15 @@
 			throw TCoreException(eErr_InvalidArgument, L"spQueue is NULL", LOCATION);
 
 		UpdateHasBuffers();
+
+		m_emptyBuffersQueueConnector = m_spDataQueue->GetNotifier().connect(boost::bind(&TWriteBufferQueueWrapper::UpdateHasBuffers, this, _1));
 	}
 
+	TWriteBufferQueueWrapper::~TWriteBufferQueueWrapper()
+	{
+		m_emptyBuffersQueueConnector.disconnect();
+	}
+
 	void TWriteBufferQueueWrapper::Push(TOverlappedDataBuffer* pBuffer)
 	{
 		if (!pBuffer)
@@ -72,7 +79,7 @@
 
 	bool TWriteBufferQueueWrapper::IsBufferReady() const
 	{
-		return !m_tClaimedQueue.empty() || !m_spDataQueue->IsEmpty();
+		return !m_tClaimedQueue.empty() || m_spDataQueue->HasPoppableBuffer();
 	}
 
 	size_t TWriteBufferQueueWrapper::GetCount() const