aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Simons <jon@jonsimons.org>2014-02-26 18:51:24 -0800
committerAndreas Schneider <asn@cryptomilk.org>2014-03-27 11:14:25 +0100
commit2091dab2739363becef219e0a7e7adda907346fb (patch)
tree7786476f64532b7efd8278c4ba30c9e8277ea87e
parent7f18ec46206b41c1f19a133e78387afd33cd6596 (diff)
downloadlibssh-2091dab2739363becef219e0a7e7adda907346fb.tar.gz
libssh-2091dab2739363becef219e0a7e7adda907346fb.tar.xz
libssh-2091dab2739363becef219e0a7e7adda907346fb.zip
channel: check for closed state in waitwindow loops
Signed-off-by: Jon Simons <jon@jonsimons.org> Reviewed-by: Andreas Schneider <asn@cryptomilk.org> (cherry picked from commit dee8e5688b4395ee379fd7f36f4a488d57fd0d6c)
-rw-r--r--src/channels.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/channels.c b/src/channels.c
index 51e96fe7..85a3ebcb 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -1238,7 +1238,8 @@ error:
static int ssh_channel_waitwindow_termination(void *c){
ssh_channel channel = (ssh_channel) c;
if (channel->remote_window > 0 ||
- channel->session->session_state == SSH_SESSION_STATE_ERROR)
+ channel->session->session_state == SSH_SESSION_STATE_ERROR ||
+ channel->state == SSH_CHANNEL_STATE_CLOSED)
return 1;
else
return 0;
@@ -1345,7 +1346,8 @@ int channel_write_common(ssh_channel channel, const void *data,
ssh_channel_waitwindow_termination,channel);
if (rc == SSH_ERROR ||
!ssh_channel_waitwindow_termination(channel) ||
- channel->session->session_state == SSH_SESSION_STATE_ERROR)
+ channel->session->session_state == SSH_SESSION_STATE_ERROR ||
+ channel->state == SSH_CHANNEL_STATE_CLOSED)
goto out;
continue;
}