aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2011-08-09 22:59:17 +0200
committerAndreas Schneider <asn@cryptomilk.org>2011-08-09 23:08:39 +0200
commitcbe8f8b7609270b8921c341a3193f11c6497f6a1 (patch)
treed345671b0ff97e2adcec625a7cc6bee12f478f5d
parent8987bc53e067a746fd0596c585f73e7fa74526fe (diff)
downloadlibssh-cbe8f8b7609270b8921c341a3193f11c6497f6a1.tar.gz
libssh-cbe8f8b7609270b8921c341a3193f11c6497f6a1.tar.xz
libssh-cbe8f8b7609270b8921c341a3193f11c6497f6a1.zip
channels: Handle SSH_AGAIN in channel_open().
(cherry picked from commit 2f878736427f5fd846f8ebb0c834e6a65bf8a638)
-rw-r--r--src/channels.c13
-rw-r--r--src/session.c8
2 files changed, 9 insertions, 12 deletions
diff --git a/src/channels.c b/src/channels.c
index b6ad996e..89acaa8e 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -292,11 +292,14 @@ static int channel_open(ssh_channel channel, const char *type_c, int window,
/* Todo: fix this into a correct loop */
/* wait until channel is opened by server */
while(channel->state == SSH_CHANNEL_STATE_NOT_OPEN){
- ssh_handle_packets(session, -2);
- if (session->session_state == SSH_SESSION_STATE_ERROR) {
- err = SSH_ERROR;
- break;
- }
+ err = ssh_handle_packets(session, -2);
+ if (err != SSH_OK) {
+ break;
+ }
+ if (session->session_state == SSH_SESSION_STATE_ERROR) {
+ err = SSH_ERROR;
+ break;
+ }
}
if(channel->state == SSH_CHANNEL_STATE_OPEN)
err=SSH_OK;
diff --git a/src/session.c b/src/session.c
index c9ea57a8..2975c1a4 100644
--- a/src/session.c
+++ b/src/session.c
@@ -464,18 +464,12 @@ int ssh_handle_packets(ssh_session session, int timeout) {
tm = ssh_make_milliseconds(session->timeout, session->timeout_usec);
}
rc = ssh_poll_ctx_dopoll(ctx, tm);
-
if (rc == SSH_ERROR) {
session->session_state = SSH_SESSION_STATE_ERROR;
}
leave_function();
-
- if (session->session_state == SSH_SESSION_STATE_ERROR) {
- return SSH_ERROR;
- }
-
- return SSH_OK;
+ return rc;
}
/**