From 8d78893a76a8c14c18b304ffe1fce2dc43ed4206 Mon Sep 17 00:00:00 2001 From: Nicolae Mihalache Date: Fri, 30 Mar 2018 19:32:08 +0200 Subject: [PATCH] Avoid writing two times the same message in case channelWritabilityChanged event is called during a write. Motivation: ChunkedWriteHandler.doFlush is called twice from the same write if the channelWritabilityChanged event is invoked during the write. The buffer is already written so no extra data is sent on the socket but it causes the "promise already done" exception to be thrown. This error happens only when the message is not ChunkedInput. Modification: Clear out the currentWrite reference before the ctx.write call, such that next time when the method is invoked the same object is not used twice. Result: Fixes #7819 --- .../main/java/io/netty/handler/stream/ChunkedWriteHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1bc0c6bf81..6f753c5c51 100644 --- a/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java +++ b/handler/src/main/java/io/netty/handler/stream/ChunkedWriteHandler.java @@ -299,8 +299,8 @@ public class ChunkedWriteHandler extends ChannelDuplexHandler { ctx.flush(); requiresFlush = false; } else { - ctx.write(pendingMessage, currentWrite.promise); this.currentWrite = null; + ctx.write(pendingMessage, currentWrite.promise); requiresFlush = true; }