I asked this question on stack overflow related to a crash that I have been getting with Thrift.
The problem occurs when using TZlibTransport.cpp. After writing to the buffer a few times, we do a flush. If there isn't enough space in cwbuf_ , the Thrift flush marker is split across two messages, which causes an error in the client, as a deflate stream can't start with a partial flush marker, ff.
Thrift should assure that there will be enough space in the buffer for the complete flush marker, before a deflate.