When using TCP and NIO, an assembler thread can stuck in infinite loop in the getNextBuffer() method of ChannelInputStream. It can get out of the loop only when the client sends another message or the socket is closed. It happens if the convert() method is called before the writingToPipe flag is cleared but after all data in channelInputStream was read. Sorry, no test cases, because it happens randomly and only under heavy load. I'll create a pull request.