[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mina-commits
Subject:    mina-sshd git commit: [SSHD-557] MINA SSHD deadlocks upon multiple concurrent HTTP downloads over lo
From:       lgoldstein () apache ! org
Date:       2015-08-31 5:42:33
Message-ID: 5665e3bcbd3740e5850337addf7e7ccb () git ! apache ! org
[Download RAW message or body]

Repository: mina-sshd
Updated Branches:
  refs/heads/master 80a73a28d -> 2d13858e0


[SSHD-557] MINA SSHD deadlocks upon multiple concurrent HTTP downloads over \
locally-forwarded ports

* Send notifyAll even if no current waiters + check 'isOpen' as 1st condition


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

Branch: refs/heads/master
Commit: 2d13858e08d3df17c9a74168463609d0ff7f2308
Parents: 80a73a2
Author: Lyor Goldstein <lgoldstein@vmware.com>
Authored: Mon Aug 31 08:42:23 2015 +0300
Committer: Lyor Goldstein <lgoldstein@vmware.com>
Committed: Mon Aug 31 08:42:23 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/sshd/common/channel/Window.java  | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/2d13858e/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
                
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java \
b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java index \
                eed5505..ed7de9b 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
@@ -103,7 +103,9 @@ public class Window extends AbstractLoggingBean implements \
java.nio.channels.Cha  lock.notifyAll();
         }
 
-        initialized.set(true);
+        if (initialized.getAndSet(true)) {
+            log.debug("init({}) re-initializing", this);
+        }
 
         if (log.isDebugEnabled()) {
             log.debug("init({}) size={}, max.={}, packet={}", this, getSize(), \
getMaxSize(), getPacketSize()); @@ -200,7 +202,7 @@ public class Window extends \
AbstractLoggingBean implements java.nio.channels.Cha  \
checkInitialized("waitAndConsume");  
         synchronized (lock) {
-            while ((size < len) && isOpen()) {
+            while (isOpen() && (size < len)) {
                 int waiters = waitingCount.incrementAndGet();
                 if (log.isDebugEnabled()) {
                     log.debug("waitAndConsume({}) - requested={}, available={}, \
waiters={}", this, len, size, waiters); @@ -243,7 +245,7 @@ public class Window \
extends AbstractLoggingBean implements java.nio.channels.Cha  \
checkInitialized("waitForSpace");  
         synchronized (lock) {
-            while ((size == 0) && isOpen()) {
+            while (isOpen() && (size <= 0)) {
                 int waiters = waitingCount.incrementAndGet();
                 if (log.isDebugEnabled()) {
                     log.debug("waitForSpace({}) - waiters={}", this, waiters);
@@ -286,8 +288,7 @@ public class Window extends AbstractLoggingBean implements \
java.nio.channels.Cha  
     @Override
     public void close() throws IOException {
-        if (isOpen()) {
-            closed.set(true);
+        if (!closed.getAndSet(true)) {
             log.debug("Closing {}", this);
         }
 
@@ -295,9 +296,7 @@ public class Window extends AbstractLoggingBean implements \
java.nio.channels.Cha  int waiters;
         synchronized (lock) {
             waiters = waitingCount.get();
-            if (waiters > 0) {
-                lock.notifyAll();
-            }
+            lock.notifyAll();
         }
 
         if (log.isDebugEnabled()) {


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic