From 88cbdb50d2e77c5e1f1f900b85af32d3216925b5 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Wed, 17 Jul 2013 21:25:51 +0900 Subject: [PATCH] Fail unflushed writes with ClosedChannelException ... instead of cryptic exception message. --- .../main/java/io/netty/channel/AbstractChannel.java | 2 +- .../java/io/netty/channel/ChannelOutboundBuffer.java | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/AbstractChannel.java b/transport/src/main/java/io/netty/channel/AbstractChannel.java index 12fdc3f895..c29b07db64 100644 --- a/transport/src/main/java/io/netty/channel/AbstractChannel.java +++ b/transport/src/main/java/io/netty/channel/AbstractChannel.java @@ -511,7 +511,7 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha outboundBuffer.fail(CLOSED_CHANNEL_EXCEPTION); } - outboundBuffer.clearUnflushed(); + outboundBuffer.clearUnflushed(CLOSED_CHANNEL_EXCEPTION); if (wasActive && !isActive()) { invokeLater(new Runnable() { diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java b/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java index 175f554187..5e26506522 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundBuffer.java @@ -211,7 +211,7 @@ final class ChannelOutboundBuffer { return head == tail; } - void clearUnflushed() { + void clearUnflushed(Throwable cause) { MessageList unflushed = unflushedMessageList; if (unflushed == null) { return; @@ -221,17 +221,13 @@ final class ChannelOutboundBuffer { Object[] messages = unflushed.messages(); ChannelPromise[] promises = unflushed.promises(); final int size = unflushed.size(); - Throwable flushAborted = null; try { for (int i = 0; i < size; i++) { ReferenceCountUtil.release(messages[i]); ChannelPromise p = promises[i]; if (!(p instanceof VoidChannelPromise)) { - if (flushAborted == null) { - flushAborted = new ChannelException("write() aborted without flush()"); - } - if (!p.tryFailure(flushAborted)) { - logger.warn("Promise done already: {} - new exception is:", p, flushAborted); + if (!p.tryFailure(cause)) { + logger.warn("Promise done already: {} - new exception is:", p, cause); } } }