Repository: mina-sshd Updated Branches: refs/heads/master 6ddbe1a65 -> 2578c9f64
[SSHD-839] Make sure unbinding of forwarded tunnel endpoint occurs even if tear-down event signalling threw an exception Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/2578c9f6 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/2578c9f6 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/2578c9f6 Branch: refs/heads/master Commit: 2578c9f6467010b3e925cfbfa59500d821701ef5 Parents: 5b803fd Author: Goldstein Lyor <[email protected]> Authored: Sun Aug 26 08:06:14 2018 +0300 Committer: Goldstein Lyor <[email protected]> Committed: Sun Aug 26 08:50:42 2018 +0300 ---------------------------------------------------------------------- .../common/forward/DefaultForwardingFilter.java | 56 +++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/2578c9f6/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwardingFilter.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwardingFilter.java b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwardingFilter.java index 01b4c0d..040b263 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwardingFilter.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwardingFilter.java @@ -260,19 +260,22 @@ public class DefaultForwardingFilter protected void unbindLocalForwarding( SshdSocketAddress local, SshdSocketAddress remote, InetSocketAddress bound) - throws IOException { + throws IOException { if ((bound != null) && (acceptor != null)) { if (log.isDebugEnabled()) { log.debug("unbindLocalForwarding({} => {}) unbind {}", local, remote, bound); } SshdSocketAddress boundAddress = new SshdSocketAddress(bound); - signalTearingDownExplicitTunnel(boundAddress, true, remote); try { - acceptor.unbind(bound); - } catch (RuntimeException e) { - signalTornDownExplicitTunnel(boundAddress, true, remote, e); - throw e; + signalTearingDownExplicitTunnel(boundAddress, true, remote); + } finally { + try { + acceptor.unbind(bound); + } catch (RuntimeException e) { + signalTornDownExplicitTunnel(boundAddress, true, remote, e); + throw e; + } } signalTornDownExplicitTunnel(boundAddress, true, remote, null); @@ -582,33 +585,36 @@ public class DefaultForwardingFilter SshdSocketAddress local, SocksProxy proxy, InetSocketAddress bound) throws IOException { boolean debugEnabled = log.isDebugEnabled(); if ((bound != null) || (proxy != null)) { - signalTearingDownDynamicTunnel(local); try { + signalTearingDownDynamicTunnel(local); + } finally { try { - if (proxy != null) { - if (debugEnabled) { - log.debug("stopDynamicPortForwarding({}) close proxy={}", local, proxy); - } + try { + if (proxy != null) { + if (debugEnabled) { + log.debug("stopDynamicPortForwarding({}) close proxy={}", local, proxy); + } - proxy.close(true); - } - } finally { - if ((bound != null) && (acceptor != null)) { - if (debugEnabled) { - log.debug("stopDynamicPortForwarding({}) unbind address={}", local, bound); + proxy.close(true); } - acceptor.unbind(bound); - } else { - if (debugEnabled) { - log.debug("stopDynamicPortForwarding({}) no acceptor({}) or no binding({})", - local, acceptor, bound); + } finally { + if ((bound != null) && (acceptor != null)) { + if (debugEnabled) { + log.debug("stopDynamicPortForwarding({}) unbind address={}", local, bound); + } + acceptor.unbind(bound); + } else { + if (debugEnabled) { + log.debug("stopDynamicPortForwarding({}) no acceptor({}) or no binding({})", + local, acceptor, bound); + } } } + } catch (RuntimeException e) { + signalTornDownDynamicTunnel(local, e); + throw e; } - } catch (RuntimeException e) { - signalTornDownDynamicTunnel(local, e); - throw e; } signalTornDownDynamicTunnel(local, null);
