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