[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