You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2013/12/03 14:27:59 UTC

[2/2] git commit: [SSHD-249] Data race in AbstractSession.close() may lead to NPE and blocks during shutdown

[SSHD-249] Data race in AbstractSession.close() may lead to NPE and blocks during shutdown

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

Branch: refs/heads/master
Commit: 9a27e728436965c388be95211297853d2dd07f37
Parents: cfc90d8
Author: Guillaume Nodet <gn...@apache.org>
Authored: Tue Dec 3 14:27:35 2013 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Tue Dec 3 14:27:35 2013 +0100

----------------------------------------------------------------------
 .../java/org/apache/sshd/common/session/AbstractSession.java   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9a27e728/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
index e855689..f5e9cdf 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
@@ -328,9 +328,9 @@ public abstract class AbstractSession implements Session {
                 try {
                     closing = true;
                     log.debug("Closing session");
-                    Channel[] channelToClose = channels.values().toArray(new Channel[channels.values().size()]);
-                    if (channelToClose.length > 0) {
-                        final AtomicInteger latch = new AtomicInteger(channelToClose.length);
+                    List<Channel> channelToClose = new ArrayList<Channel>(channels.values());
+                    if (channelToClose.size() > 0) {
+                        final AtomicInteger latch = new AtomicInteger(channelToClose.size());
                         for (Channel channel : channelToClose) {
                             log.debug("Closing channel {}", channel.getId());
                             channel.close(immediately).addListener(new SshFutureListener() {