]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Merge commit 'v2.13.1-168-g5e9cf0ab' into thread-next
authorMaria Matejka <mq@ucw.cz>
Sun, 28 Jan 2024 12:40:23 +0000 (13:40 +0100)
committerMaria Matejka <mq@ucw.cz>
Sun, 28 Jan 2024 12:40:23 +0000 (13:40 +0100)
1  2 
lib/event.h
sysdep/unix/io.c

diff --cc lib/event.h
index f89c17ba2c214f17bcde4a4c9835acc9ee615ebc,5f3b78d894b086cbc7a7fdea645da4b5762314d6..1dde1e7d0d64c7a0c179810bd19e1b1f394cf3bf
@@@ -36,19 -25,13 +36,20 @@@ extern event_list global_work_list
  
  event *ev_new(pool *);
  void ev_run(event *);
 -#define ev_init_list(el) init_list(el)
 +void ev_init_list(event_list *, struct birdloop *loop, const char *name);
  void ev_enqueue(event_list *, event *);
 -void ev_schedule(event *);
 -void ev_schedule_work(event *);
 +#define ev_send ev_enqueue
 +#define ev_send_loop(l, e) ev_send(birdloop_event_list((l)), (e))
 +
 +#define ev_schedule(e) ({ ASSERT_THE_BIRD_LOCKED; if (!ev_active((e))) ev_send(&global_event_list, (e)); })
 +#define ev_schedule_work(e) ({ ASSERT_THE_BIRD_LOCKED; if (!ev_active((e))) ev_send(&global_work_list, (e)); })
 +
  void ev_postpone(event *);
 -int ev_run_list(event_list *);
  int ev_run_list_limited(event_list *, uint);
 +#define ev_run_list(l)        ev_run_list_limited((l), ~0)
++#define ev_list_empty(l)  !ev_run_list_limited((l), 0)
 +
 +#define LEGACY_EVENT_LIST(l)  (((l) == &global_event_list) || ((l) == &global_work_list))
  
  static inline int
  ev_active(event *e)
index b4f00107db9ae29370483c26ccb192d9de631f72,4b3eef4862f195d6af59035402e17fd5bb68838e..ce5a3d63f1c95de29c893b538592bdf72c6ab4b5
@@@ -2334,18 -2225,17 +2334,22 @@@ io_loop(void
    watchdog_start1();
    for(;;)
      {
 -      times_update(&main_timeloop);
 +      times_update();
-       events = ev_run_list(&global_event_list);
-       events = ev_run_list_limited(&global_work_list, WORK_EVENTS_MAX) || events;
-       events = ev_run_list(&main_birdloop.event_list) || events;
+       ev_run_list(&global_event_list);
+       ev_run_list_limited(&global_work_list, WORK_EVENTS_MAX);
 -      timers_fire(&main_timeloop);
++      ev_run_list(&main_birdloop.event_list);
 +      timers_fire(&main_birdloop.time, 1);
        io_close_event();
  
-       // FIXME
 -      events = !EMPTY_LIST(global_event_list) || !EMPTY_LIST(global_work_list);
++      events =
++      !ev_list_empty(&global_event_list) ||
++      !ev_list_empty(&global_work_list) ||
++      !ev_list_empty(&main_birdloop.event_list);
++
        poll_tout = (events ? 0 : 3000); /* Time in milliseconds */
 -      if (t = timers_first(&main_timeloop))
 +      if (t = timers_first(&main_birdloop.time))
        {
 -      times_update(&main_timeloop);
 +      times_update();
        timeout = (tm_remains(t) TO_MS) + 1;
        poll_tout = MIN(poll_tout, timeout);
        }