You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2019/04/30 05:13:45 UTC
[mina-sshd] branch master updated: [SSHD-911] Check if client
session/channel is open before writing a message through
ClientChannelPendingMessagesQueue
This is an automated email from the ASF dual-hosted git repository.
lgoldstein pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
The following commit(s) were added to refs/heads/master by this push:
new 4fd8d46 [SSHD-911] Check if client session/channel is open before writing a message through ClientChannelPendingMessagesQueue
4fd8d46 is described below
commit 4fd8d465b3053573ce60ac7a6af122010740205f
Author: Lyor Goldstein <lg...@apache.org>
AuthorDate: Mon Apr 22 13:13:55 2019 +0300
[SSHD-911] Check if client session/channel is open before writing a message through ClientChannelPendingMessagesQueue
---
.../client/channel/ClientChannelPendingMessagesQueue.java | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/ClientChannelPendingMessagesQueue.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/ClientChannelPendingMessagesQueue.java
index e6ab058..eedba37 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/ClientChannelPendingMessagesQueue.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/ClientChannelPendingMessagesQueue.java
@@ -35,6 +35,7 @@ import java.util.function.Consumer;
import org.apache.sshd.client.future.DefaultOpenFuture;
import org.apache.sshd.client.future.OpenFuture;
import org.apache.sshd.common.future.SshFutureListener;
+import org.apache.sshd.common.session.Session;
import org.apache.sshd.common.util.buffer.Buffer;
import org.apache.sshd.common.util.logging.AbstractLoggingBean;
@@ -148,6 +149,7 @@ public class ClientChannelPendingMessagesQueue
if (enqueue) {
pendingQueue.add(new SimpleImmutableEntry<>(buffer, errHandler));
+ pendingQueue.notifyAll(); // in case anyone is waiting
} else {
writeMessage(buffer, errHandler);
}
@@ -163,6 +165,15 @@ public class ClientChannelPendingMessagesQueue
throw new EOFException("Queue is marked as closed");
}
+ if (!channel.isOpen()) {
+ throw new EOFException("Client channel is closed/closing");
+ }
+
+ Session session = channel.getSession();
+ if (!session.isOpen()) {
+ throw new EOFException("Client session is closed/closing");
+ }
+
OutputStream outputStream = channel.getInvertedIn();
outputStream.write(buffer.array(), buffer.rpos(), buffer.available());
outputStream.flush();