diff --git a/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java b/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java index 8bf46a6912..7d226afe50 100644 --- a/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java +++ b/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java @@ -177,7 +177,7 @@ public class ChunkedWriteHandler } currentWrite.fail(cause); } else { - currentWrite.promise.setSuccess(); + currentWrite.success(); } closeInput(in); } catch (Exception e) { @@ -278,7 +278,8 @@ public class ChunkedWriteHandler @Override public void operationComplete(ChannelFuture future) throws Exception { pendingWrites.decrementAndGet(); - currentWrite.promise.setSuccess(); + currentWrite.progress(); + currentWrite.success(); closeInput(chunks); } }); @@ -354,6 +355,14 @@ public class ChunkedWriteHandler } } + void success() { + if (promise instanceof ChannelProgressivePromise) { + // Now we know what the total is. + ((ChannelProgressivePromise) promise).tryProgress(progress, progress); + } + promise.setSuccess(); + } + void progress() { progress ++; if (promise instanceof ChannelProgressivePromise) { diff --git a/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java b/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java index a668874e12..7674b5dfe4 100644 --- a/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java +++ b/transport/src/main/java/io/netty/channel/nio/AbstractNioByteChannel.java @@ -187,11 +187,12 @@ public abstract class AbstractNioByteChannel extends AbstractNioChannel { } } + in.progress(flushedAmount); + if (done) { in.remove(); } else { // Did not write completely. - in.progress(flushedAmount); setOpWrite(); break; } @@ -215,11 +216,12 @@ public abstract class AbstractNioByteChannel extends AbstractNioChannel { } } + in.progress(flushedAmount); + if (done) { in.remove(); } else { // Did not write completely. - in.progress(flushedAmount); setOpWrite(); break; } diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java index 3b06ce5032..8cbcd9e908 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java @@ -279,13 +279,15 @@ public class NioSocketChannel extends AbstractNioByteChannel implements io.netty final int readableBytes = buf.writerIndex() - readerIndex; if (readableBytes < writtenBytes) { + in.progress(readableBytes); in.remove(); writtenBytes -= readableBytes; } else if (readableBytes > writtenBytes) { buf.readerIndex(readerIndex + (int) writtenBytes); in.progress(writtenBytes); break; - } else { // readable == writtenBytes + } else { // readableBytes == writtenBytes + in.progress(readableBytes); in.remove(); break; }