From cffbba94ee476b87a3932d2d5a975e55714657f9 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Fri, 26 Jul 2013 14:10:31 +0200 Subject: [PATCH] [#1654] Remove AbstractChannel.doPreClose() and notify close future on register failure. Based on patch of @jpinner --- .../io/netty/channel/AbstractChannel.java | 16 ++--------- .../io/netty/channel/local/LocalChannel.java | 28 ++++++++----------- .../channel/local/LocalServerChannel.java | 20 ++++--------- 3 files changed, 19 insertions(+), 45 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/AbstractChannel.java b/transport/src/main/java/io/netty/channel/AbstractChannel.java index 4f544bc67a..f59f3f2979 100644 --- a/transport/src/main/java/io/netty/channel/AbstractChannel.java +++ b/transport/src/main/java/io/netty/channel/AbstractChannel.java @@ -415,6 +415,7 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha "Force-closing a channel whose registration task was unaccepted by an event loop: {}", AbstractChannel.this, t); closeForcibly(); + closeFuture.setClosed(); promise.setFailure(t); } } @@ -440,12 +441,12 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha } catch (Throwable t) { // Close the channel directly to avoid FD leak. closeForcibly(); + closeFuture.setClosed(); if (!promise.tryFailure(t)) { logger.warn( "Tried to fail the registration promise, but it is complete already. " + "Swallowing the cause of the registration failure:", t); } - closeFuture.setClosed(); } } @@ -750,14 +751,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha */ protected abstract void doDisconnect() throws Exception; - /** - * Will be called before the actual close operation will be performed. Sub-classes may override this as the default - * is to do nothing. - */ - protected void doPreClose() throws Exception { - // NOOP by default - } - /** * Close the {@link Channel} */ @@ -834,11 +827,6 @@ public abstract class AbstractChannel extends DefaultAttributeMap implements Cha } boolean setClosed() { - try { - doPreClose(); - } catch (Exception e) { - logger.warn("doPreClose() raised an exception.", e); - } return super.trySuccess(); } } diff --git a/transport/src/main/java/io/netty/channel/local/LocalChannel.java b/transport/src/main/java/io/netty/channel/local/LocalChannel.java index cc4acb2050..93b1d1810e 100644 --- a/transport/src/main/java/io/netty/channel/local/LocalChannel.java +++ b/transport/src/main/java/io/netty/channel/local/LocalChannel.java @@ -198,25 +198,19 @@ public class LocalChannel extends AbstractChannel { doClose(); } - @Override - protected void doPreClose() throws Exception { - if (state > 2) { - // Closed already - return; - } - - // Update all internal state before the closeFuture is notified. - if (localAddress != null) { - if (parent() == null) { - LocalChannelRegistry.unregister(localAddress); - } - localAddress = null; - } - state = 3; - } - @Override protected void doClose() throws Exception { + if (state <= 2) { + // Update all internal state before the closeFuture is notified. + if (localAddress != null) { + if (parent() == null) { + LocalChannelRegistry.unregister(localAddress); + } + localAddress = null; + } + state = 3; + } + LocalChannel peer = this.peer; if (peer != null && peer.isActive()) { peer.unsafe().close(unsafe().voidPromise()); diff --git a/transport/src/main/java/io/netty/channel/local/LocalServerChannel.java b/transport/src/main/java/io/netty/channel/local/LocalServerChannel.java index 7f279cf440..fc08285ef3 100644 --- a/transport/src/main/java/io/netty/channel/local/LocalServerChannel.java +++ b/transport/src/main/java/io/netty/channel/local/LocalServerChannel.java @@ -93,22 +93,14 @@ public class LocalServerChannel extends AbstractServerChannel { state = 1; } - @Override - protected void doPreClose() throws Exception { - if (state > 1) { - // Closed already. - return; - } - - // Update all internal state before the closeFuture is notified. - LocalChannelRegistry.unregister(localAddress); - localAddress = null; - state = 2; - } - @Override protected void doClose() throws Exception { - // All internal state was updated already at doPreClose(). + if (state <= 1) { + // Update all internal state before the closeFuture is notified. + LocalChannelRegistry.unregister(localAddress); + localAddress = null; + state = 2; + } } @Override