diff --git a/src/main/java/org/jboss/netty/handler/stream/ChunkedWriteHandler.java b/src/main/java/org/jboss/netty/handler/stream/ChunkedWriteHandler.java index 96b2838511..bad00834b3 100644 --- a/src/main/java/org/jboss/netty/handler/stream/ChunkedWriteHandler.java +++ b/src/main/java/org/jboss/netty/handler/stream/ChunkedWriteHandler.java @@ -211,7 +211,7 @@ public class ChunkedWriteHandler implements ChannelUpstreamHandler, ChannelDowns final MessageEvent currentEvent = this.currentEvent; Object m = currentEvent.getMessage(); if (m instanceof ChunkedInput) { - ChunkedInput chunks = (ChunkedInput) m; + final ChunkedInput chunks = (ChunkedInput) m; Object chunk; boolean endOfInput; boolean suspend; @@ -248,8 +248,18 @@ public class ChunkedWriteHandler implements ChannelUpstreamHandler, ChannelDowns ChannelFuture writeFuture; if (endOfInput) { this.currentEvent = null; - closeInput(chunks); writeFuture = currentEvent.getFuture(); + + // Register a listener which will close the input once the write is complete. This is needed because the Chunk may have + // some resource bound that can not be closed before its not written + // + // See https://github.com/netty/netty/issues/303 + writeFuture.addListener(new ChannelFutureListener() { + + public void operationComplete(ChannelFuture future) throws Exception { + closeInput(chunks); + } + }); } else { writeFuture = future(channel); writeFuture.addListener(new ChannelFutureListener() {