Index: src/libchcore/TOverlappedWriter.h
===================================================================
diff -u -N -r3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9 -r6e4ac7776b68464371cd8522a2a8d79fbcab3b28
--- src/libchcore/TOverlappedWriter.h	(.../TOverlappedWriter.h)	(revision 3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9)
+++ src/libchcore/TOverlappedWriter.h	(.../TOverlappedWriter.h)	(revision 6e4ac7776b68464371cd8522a2a8d79fbcab3b28)
@@ -24,6 +24,7 @@
 #include "TOrderedBufferQueue.h"
 #include "TFailedBufferQueue.h"
 #include "TWriteBufferQueueWrapper.h"
+#include "TBufferList.h"
 
 namespace chcore
 {
@@ -40,6 +41,8 @@
 
 		TOverlappedWriter& operator=(const TOverlappedWriter&) = delete;
 
+		TOverlappedDataBuffer* GetWriteBuffer();
+
 		// buffer management - writer
 		void AddFailedWriteBuffer(TOverlappedDataBuffer* pBuffer);
 		TOverlappedDataBuffer* GetFailedWriteBuffer();
@@ -48,6 +51,7 @@
 		TOverlappedDataBuffer* GetFinishedBuffer();
 
 		// processing info
+		void MarkAsFinalized(TOverlappedDataBuffer* pBuffer);
 		bool IsDataWritingFinished() const { return m_bDataWritingFinished; }
 
 		// event access
@@ -56,6 +60,7 @@
 		HANDLE GetEventWriteFinishedHandle() const { return m_tFinishedBuffers.GetHasBuffersEvent(); }
 
 		size_t GetBufferCount() const;
+		void ReleaseBuffers(const TBufferListPtr& spList);
 
 	private:
 		logger::TLoggerPtr m_spLog;
@@ -66,6 +71,7 @@
 		TOrderedBufferQueue m_tFinishedBuffers;
 
 		bool m_bDataWritingFinished = false;	// output file was already written to the end
+		TOverlappedDataBuffer* m_pLastPartBuffer = nullptr;
 	};
 }