Repository: mina-sshd
Updated Branches:
  refs/heads/master ea9f960cc -> 8aee2acf3 (forced update)


[SSHD-793] Using more conservative session ID tracking mechanism


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

Branch: refs/heads/master
Commit: 8aee2acf315a64403b7dcf128a5fc8a5e8dfe39e
Parents: 8a43a50
Author: Lyor Goldstein <lyor.goldst...@gmail.com>
Authored: Thu Jan 11 19:18:04 2018 +0200
Committer: Guillaume Nodet <gno...@apache.org>
Committed: Thu Jan 11 18:24:10 2018 +0100

----------------------------------------------------------------------
 .../apache/sshd/common/io/nio2/Nio2Acceptor.java    | 16 ++++++++++++++--
 .../apache/sshd/common/io/nio2/Nio2Connector.java   | 16 +++++++++++++---
 .../org/apache/sshd/common/io/nio2/Nio2Service.java |  8 +++++++-
 3 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/8aee2acf/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 c047f21..0427c80 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
@@ -183,14 +183,24 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
             }
 
             Nio2Session session = null;
+            Long sessionId = null;
             try {
                 // Create a session
                 IoHandler handler = getIoHandler();
                 setSocketOptions(result);
                 session = 
Objects.requireNonNull(createSession(Nio2Acceptor.this, address, result, 
handler), "No NIO2 session created");
+                sessionId = session.getId();
                 handler.sessionCreated(session);
-                sessions.put(session.getId(), session);
-                session.startReading();
+                sessions.put(sessionId, session);
+                if (session.isClosing()) {
+                    try {
+                        handler.sessionClosed(session);
+                    } finally {
+                        unmapSession(sessionId);
+                    }
+                } else {
+                    session.startReading();
+                }
             } catch (Throwable exc) {
                 failed(exc, address);
 
@@ -205,6 +215,8 @@ public class Nio2Acceptor extends Nio2Service implements 
IoAcceptor {
                                  t);
                     }
                 }
+
+                unmapSession(sessionId);
             }
 
             try {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/8aee2acf/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java 
b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
index 68397b1..360f673 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/io/nio2/Nio2Connector.java
@@ -110,13 +110,22 @@ public class Nio2Connector extends Nio2Service implements 
IoConnector {
             @Override
             @SuppressWarnings("synthetic-access")
             protected void onCompleted(Void result, Object attachment) {
+                Long sessionId = null;
                 try {
                     Nio2Session session = createSession(manager, handler, 
socket);
                     handler.sessionCreated(session);
-                    long sessionId = session.getId();
+                    sessionId = session.getId();
                     sessions.put(sessionId, session);
                     future.setSession(session);
-                    session.startReading();
+                    if (session.isClosing()) {
+                        try {
+                            handler.sessionClosed(session);
+                        } finally {
+                            unmapSession(sessionId);
+                        }
+                    } else {
+                        session.startReading();
+                    }
                 } catch (Throwable exc) {
                     Throwable t = GenericUtils.peelException(exc);
                     if (log.isDebugEnabled()) {
@@ -136,11 +145,12 @@ public class Nio2Connector extends Nio2Service implements 
IoConnector {
                     }
 
                     future.setException(t);
+                    unmapSession(sessionId);
                 }
             }
 
             @Override
-            protected void onFailed(final Throwable exc, final Object 
attachment) {
+            protected void onFailed(Throwable exc, Object attachment) {
                 future.setException(exc);
             }
         };

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/8aee2acf/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 cf3a8a2..4ff7598 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
@@ -125,7 +125,13 @@ public abstract class Nio2Service extends 
AbstractInnerCloseable implements IoSe
     }
 
     public void sessionClosed(Nio2Session session) {
-        sessions.remove(session.getId());
+        unmapSession(session.getId());
+    }
+
+    protected void unmapSession(Long sessionId) {
+        if (sessionId != null) {
+            sessions.remove(sessionId);
+        }
     }
 
     @SuppressWarnings("unchecked")

Reply via email to