diff options
author | Matt Johnston <matt@ucc.asn.au> | 2006-12-05 13:28:44 +0000 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2006-12-05 13:28:44 +0000 |
commit | 235ac72a066c97c5164a7e5c702f40870397e5e3 (patch) | |
tree | d1dd2439b2e34fe063915c99bbff82c3af112db6 | |
parent | 71e25058c1907cc17e8b40d1e7a3d2595cf7f776 (diff) | |
parent | dd06653e53c9a6a3734eaf5ce5e9374f559a2bf4 (diff) |
merge of 'a94c5265558121fe936519b5d9a5eb27f95e9d9d'
and 'd348546b80847bc0d42a7b5208bb31a54f1fdfaf'
--HG--
branch : channel-fix
extra : convert_revision : a144a771379fa1f0204f81ac3182d045f884be19
-rw-r--r-- | common-session.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/common-session.c b/common-session.c index b8ea6f7..a16d1f9 100644 --- a/common-session.c +++ b/common-session.c @@ -143,27 +143,21 @@ void session_loop(void(*loophandler)()) { dropbear_exit("Terminated by signal"); } - if (val < 0) { - if (errno == EINTR) { - /* This must happen even if we've been interrupted, so that - * changed signal-handler vars can take effect etc */ - if (loophandler) { - loophandler(); - } - continue; - } else { - dropbear_exit("Error in select"); - } + if (val < 0 && errno != EINTR) { + dropbear_exit("Error in select"); + } + + if (val <= 0) { + /* If we were interrupted or the select timed out, we still + * want to iterate over channels etc for reading, to handle + * server processes exiting etc. + * We don't want to read/write FDs. */ + FD_ZERO(&writefd); + FD_ZERO(&readfd); } /* check for auth timeout, rekeying required etc */ checktimeouts(); - - if (val == 0) { - /* timeout */ - TRACE(("select timeout")) - continue; - } /* process session socket's incoming/outgoing data */ if (ses.sock != -1) { |