Index: src/libchcore/TOverlappedDataBufferQueue.cpp
===================================================================
diff -u -r861eb97e5f43584f9537b4aff0558f6689bd0e38 -r7e407d35b44ec7482a112ef382e4619cf5d96172
--- src/libchcore/TOverlappedDataBufferQueue.cpp	(.../TOverlappedDataBufferQueue.cpp)	(revision 861eb97e5f43584f9537b4aff0558f6689bd0e38)
+++ src/libchcore/TOverlappedDataBufferQueue.cpp	(.../TOverlappedDataBufferQueue.cpp)	(revision 7e407d35b44ec7482a112ef382e4619cf5d96172)
@@ -108,11 +108,14 @@
 
 			m_setFullBuffers.erase(m_setFullBuffers.begin());
 
-			// if this is the last part - mark that writing is finished, so that no other buffer will be written
-			if (pBuffer->IsLastPart())
-				m_bDataWritingFinished = true;
+			if(pBuffer->GetErrorCode() == ERROR_SUCCESS)
+			{
+				// if this is the last part - mark that writing is finished, so that no other buffer will be written
+				if(pBuffer->IsLastPart())
+					m_bDataWritingFinished = true;
 
-			++m_ullNextWriteBufferOrder;
+				++m_ullNextWriteBufferOrder;
+			}
 
 			UpdateWritePossibleEvent();
 			m_eventAllBuffersAccountedFor.ResetEvent();
Index: src/libchcore/TWin32ErrorFormatter.cpp
===================================================================
diff -u -r8068e0c351055554340ac9755d1bc846893bf2b8 -r7e407d35b44ec7482a112ef382e4619cf5d96172
--- src/libchcore/TWin32ErrorFormatter.cpp	(.../TWin32ErrorFormatter.cpp)	(revision 8068e0c351055554340ac9755d1bc846893bf2b8)
+++ src/libchcore/TWin32ErrorFormatter.cpp	(.../TWin32ErrorFormatter.cpp)	(revision 7e407d35b44ec7482a112ef382e4619cf5d96172)
@@ -19,6 +19,7 @@
 #include "stdafx.h"
 #include "TWin32ErrorFormatter.h"
 #include <algorithm>
+#include <atltrace.h>
 
 namespace chcore
 {
@@ -57,7 +58,12 @@
 			strData.ReleaseBufferSetLength(iPos < 0 ? 0 : iPos);
 		}
 		else
+		{
+			if(dwPos == 0)
+				ATLTRACE(L"Cannot format error message. Error code=%lu\n", GetLastError());
+
 			strData.ReleaseBufferSetLength(std::min(dwPos, dwMaxError - 1));
+		}
 
 		strData.TrimRightSelf(_T("\r\n"));