From 2f878736427f5fd846f8ebb0c834e6a65bf8a638 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 9 Aug 2011 22:59:17 +0200 Subject: channels: Handle SSH_AGAIN in channel_open(). --- src/channels.c | 13 ++++++++----- src/session.c | 8 +------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/channels.c b/src/channels.c index fb57be0..6a616ad 100644 --- a/src/channels.c +++ b/src/channels.c @@ -296,11 +296,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 5aa6cbb..589fa5b 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; } /** -- cgit