Repository: mina-sshd
Updated Branches:
  refs/heads/master 1cd204b7a -> 063038150


[SSHD-786] Mark Nio2Service correctly as disposing when dispose() called


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/94369e0e
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/94369e0e
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/94369e0e

Branch: refs/heads/master
Commit: 94369e0ed4e68a3274f7de139ad6cf132858ee44
Parents: 1cd204b
Author: Goldstein Lyor <[email protected]>
Authored: Thu Dec 7 08:30:33 2017 +0200
Committer: Lyor Goldstein <[email protected]>
Committed: Tue Dec 19 19:18:35 2017 +0200

----------------------------------------------------------------------
 .../sshd/common/io/nio2/Nio2Acceptor.java       | 37 ++++++++++++++------
 .../apache/sshd/common/io/nio2/Nio2Service.java |  8 +++--
 2 files changed, 33 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/94369e0e/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java 
b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
index 66a3c41..ce86aaf 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Acceptor.java
@@ -89,8 +89,12 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
 
     @Override
     public void unbind() {
-        log.debug("Unbinding");
-        unbind(getBoundAddresses());
+        Collection<SocketAddress> addresses = getBoundAddresses();
+        if (log.isDebugEnabled()) {
+            log.debug("Unbinding {}", addresses);
+        }
+
+        unbind(addresses);
     }
 
     @Override
@@ -105,7 +109,7 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
                     channel.close();
                 } catch (IOException e) {
                     log.warn("unbind({}) {} while unbinding channel: {}",
-                             address, e.getClass().getSimpleName(), 
e.getMessage());
+                         address, e.getClass().getSimpleName(), 
e.getMessage());
                     if (log.isDebugEnabled()) {
                         log.debug("unbind(" + address + ") failure details", 
e);
                     }
@@ -155,6 +159,11 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
         super.doCloseImmediately();
     }
 
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "[" + getBoundAddresses() + "]";
+    }
+
     protected class AcceptCompletionHandler extends 
Nio2CompletionHandler<AsynchronousSocketChannel, SocketAddress> {
         protected final AsynchronousServerSocketChannel socket;
 
@@ -167,6 +176,9 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
         protected void onCompleted(AsynchronousSocketChannel result, 
SocketAddress address) {
             // Verify that the address has not been unbound
             if (!channels.containsKey(address)) {
+                if (log.isDebugEnabled()) {
+                    log.debug("onCompleted({}) unbound address", address);
+                }
                 return;
             }
 
@@ -187,7 +199,7 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
                     try {
                         session.close();
                     } catch (Throwable t) {
-                        log.warn("Failed (" + t.getClass().getSimpleName() + 
")"
+                        log.warn("onCompleted(" + address + ") Failed (" + 
t.getClass().getSimpleName() + ")"
                                + " to close accepted connection from " + 
address
                                + ": " + t.getMessage(),
                                  t);
@@ -223,13 +235,18 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
                 return;
             }
 
-            if (!disposing.get()) {
-                log.warn("Caught " + exc.getClass().getSimpleName()
-                       + " while accepting incoming connection from " + address
-                       + ": " + exc.getMessage(),
-                        exc);
-                // TODO (SSHD-786) consider closing the channel
+            if (disposing.get()) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Caught {} for tracked channel of {} while 
disposing: {}",
+                        exc.getClass().getSimpleName(), address, 
exc.getMessage());
+                }
+                return;
             }
+
+            log.warn("Caught " + exc.getClass().getSimpleName()
+                   + " while accepting incoming connection from " + address
+                   + ": " + exc.getMessage(),
+                    exc);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/94369e0e/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java 
b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
index 763b54c..15d2520 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Service.java
@@ -93,6 +93,10 @@ public abstract class Nio2Service extends 
AbstractInnerCloseable implements IoSe
 
     public void dispose() {
         try {
+            if (disposing.getAndSet(true)) {
+                log.warn("dispose({}) already disposing", this);
+            }
+
             long maxWait = Closeable.getMaxCloseWaitTime(getFactoryManager());
             boolean successful = close(true).await(maxWait);
             if (!successful) {
@@ -100,11 +104,11 @@ public abstract class Nio2Service extends 
AbstractInnerCloseable implements IoSe
             }
         } catch (IOException e) {
             if (log.isDebugEnabled()) {
-                log.debug(e.getClass().getSimpleName() + " while stopping 
service: " + e.getMessage());
+                log.debug("dispose({}) {} while stopping service: {}", this, 
e.getClass().getSimpleName(), e.getMessage());
             }
 
             if (log.isTraceEnabled()) {
-                log.trace("Stop exception details", e);
+                log.trace("dispose(" + this + ") Stop exception details", e);
             }
         }
     }

Reply via email to