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