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() {