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)
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);
}