Make sure ChunkedInput.close() is not called before the write is complete. See #303
This commit is contained in:
parent
abc2877f91
commit
7d2d742a43
@ -211,7 +211,7 @@ public class ChunkedWriteHandler implements ChannelUpstreamHandler, ChannelDowns
|
|||||||
final MessageEvent currentEvent = this.currentEvent;
|
final MessageEvent currentEvent = this.currentEvent;
|
||||||
Object m = currentEvent.getMessage();
|
Object m = currentEvent.getMessage();
|
||||||
if (m instanceof ChunkedInput) {
|
if (m instanceof ChunkedInput) {
|
||||||
ChunkedInput chunks = (ChunkedInput) m;
|
final ChunkedInput chunks = (ChunkedInput) m;
|
||||||
Object chunk;
|
Object chunk;
|
||||||
boolean endOfInput;
|
boolean endOfInput;
|
||||||
boolean suspend;
|
boolean suspend;
|
||||||
@ -248,8 +248,18 @@ public class ChunkedWriteHandler implements ChannelUpstreamHandler, ChannelDowns
|
|||||||
ChannelFuture writeFuture;
|
ChannelFuture writeFuture;
|
||||||
if (endOfInput) {
|
if (endOfInput) {
|
||||||
this.currentEvent = null;
|
this.currentEvent = null;
|
||||||
closeInput(chunks);
|
|
||||||
writeFuture = currentEvent.getFuture();
|
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 {
|
} else {
|
||||||
writeFuture = future(channel);
|
writeFuture = future(channel);
|
||||||
writeFuture.addListener(new ChannelFutureListener() {
|
writeFuture.addListener(new ChannelFutureListener() {
|
||||||
|
Loading…
Reference in New Issue
Block a user