]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
If the main event queue is not empty, call select() with zero timeout, so
authorMartin Mares <mj@ucw.cz>
Wed, 17 Nov 1999 12:04:24 +0000 (12:04 +0000)
committerMartin Mares <mj@ucw.cz>
Wed, 17 Nov 1999 12:04:24 +0000 (12:04 +0000)
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.

sysdep/unix/io.c

index aef348cea499f4c524a0e46b352c8258fa1e51db..5bc9b5ac914559b17731aa0abf70b4ebe9334b3a 100644 (file)
@@ -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)