From: Maria Matejka Date: Sun, 28 Jan 2024 12:40:23 +0000 (+0100) Subject: Merge commit 'v2.13.1-168-g5e9cf0ab' into thread-next X-Git-Tag: v3.0.0~301 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a28264adc57f63f3e9356976c008e45af63594b0;p=thirdparty%2Fbird.git Merge commit 'v2.13.1-168-g5e9cf0ab' into thread-next --- a28264adc57f63f3e9356976c008e45af63594b0 diff --cc lib/event.h index f89c17ba2,5f3b78d89..1dde1e7d0 --- a/lib/event.h +++ b/lib/event.h @@@ -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) diff --cc sysdep/unix/io.c index b4f00107d,4b3eef486..ce5a3d63f --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@@ -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); }