X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fcommons%2Fprotocol-framework%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fframework%2FReconnectPromise.java;h=aaec95a74b5886150c8d0bc4bb7d11a1a1570dbf;hb=4061a49630bd90e2a4839fc5f5622e1faaebfd67;hp=b2ab27a82671cdc0c2380ac8f1084e540ee61691;hpb=44eb0b8e2fc5f240cfca167207e026d35b75f8a5;p=controller.git diff --git a/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ReconnectPromise.java b/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ReconnectPromise.java index b2ab27a826..aaec95a74b 100644 --- a/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ReconnectPromise.java +++ b/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ReconnectPromise.java @@ -47,13 +47,12 @@ final class ReconnectPromise, L extends SessionList pending = this.dispatcher.createClient(this.address, cs, b, new AbstractDispatcher.PipelineInitializer() { @Override public void initializeChannel(final SocketChannel channel, final Promise promise) { - // add closed channel handler - // This handler has to be added before initializer.initializeChannel is called - // Initializer might add some handlers using addFirst e.g. AsyncSshHandler and in that case - // closed channel handler is before the handler that invokes channel inactive event - channel.pipeline().addFirst(new ClosedChannelHandler(ReconnectPromise.this)); - initializer.initializeChannel(channel, promise); + // add closed channel handler + // This handler has to be added as last channel handler and the channel inactive event has to be caught by it + // Handlers in front of it can react to channelInactive event, but have to forward the event or the reconnect will not work + // This handler is last so all handlers in front of it can handle channel inactive (to e.g. resource cleanup) before a new connection is started + channel.pipeline().addLast(new ClosedChannelHandler(ReconnectPromise.this)); } }); } @@ -91,9 +90,7 @@ final class ReconnectPromise, L extends SessionList @Override public void channelInactive(final ChannelHandlerContext ctx) throws Exception { - // Pass info about disconnect further and then reconnect - super.channelInactive(ctx); - + // This is the ultimate channel inactive handler, not forwarding if (promise.isCancelled()) { return; }