diff options
author | Martin Mares <mj@ucw.cz> | 1999-11-17 13:04:24 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1999-11-17 13:04:24 +0100 |
commit | 30770df2ab33ffbfd75a9478265ac5e1a1db98d9 (patch) | |
tree | f63da9733ab5ca61d7706e6746cdbac4c9efd520 | |
parent | 84a7d7f77c05578d9ebfff90672e73f021999d25 (diff) | |
download | bird-30770df2ab33ffbfd75a9478265ac5e1a1db98d9.tar bird-30770df2ab33ffbfd75a9478265ac5e1a1db98d9.zip |
If the main event queue is not empty, call select() with zero timeout, so
that the events are ran again after the FD's are checked. This allows us
to schedule I/O checks between processing of user commands.
-rw-r--r-- | sysdep/unix/io.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index aef348c..5bc9b5a 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -894,7 +894,7 @@ io_loop(void) fd_set rd, wr; struct timeval timo; time_t tout; - int hi; + int hi, events; sock *s; node *n, *p; @@ -904,7 +904,7 @@ io_loop(void) FD_ZERO(&wr); for(;;) { - ev_run_list(&global_event_list); + events = ev_run_list(&global_event_list); now = time(NULL); tout = tm_first_shot(); if (tout <= now) @@ -912,11 +912,8 @@ io_loop(void) tm_shot(); continue; } - else - { - timo.tv_sec = tout - now; - timo.tv_usec = 0; - } + timo.tv_sec = events ? 0 : tout - now; + timo.tv_usec = 0; hi = 0; WALK_LIST(n, sock_list) |