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);

Reply via email to