summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2006-12-05 13:28:44 +0000
committerMatt Johnston <matt@ucc.asn.au>2006-12-05 13:28:44 +0000
commit235ac72a066c97c5164a7e5c702f40870397e5e3 (patch)
treed1dd2439b2e34fe063915c99bbff82c3af112db6
parent71e25058c1907cc17e8b40d1e7a3d2595cf7f776 (diff)
parentdd06653e53c9a6a3734eaf5ce5e9374f559a2bf4 (diff)
merge of 'a94c5265558121fe936519b5d9a5eb27f95e9d9d'
and 'd348546b80847bc0d42a7b5208bb31a54f1fdfaf' --HG-- branch : channel-fix extra : convert_revision : a144a771379fa1f0204f81ac3182d045f884be19
-rw-r--r--common-session.c28
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) {