From 6a242b3ec66f2ab89f9277e67125eab3e3676644 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Wed, 4 Oct 2023 17:36:03 +0200 Subject: [PATCH] IO: Fix race condition in event processing When regular event was added from work event, we did remember that regular event list was empty and therefore we did not use zero time in poll(). This leads to ~3 s latency in route reload during reconfiguration. --- sysdep/unix/io.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 6aedcfb6..4b3eef48 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -2226,12 +2226,12 @@ io_loop(void) for(;;) { times_update(&main_timeloop); - events = ev_run_list(&global_event_list); - events = ev_run_list_limited(&global_work_list, WORK_EVENTS_MAX) || events; + ev_run_list(&global_event_list); + ev_run_list_limited(&global_work_list, WORK_EVENTS_MAX); timers_fire(&main_timeloop); io_close_event(); - // FIXME + events = !EMPTY_LIST(global_event_list) || !EMPTY_LIST(global_work_list); poll_tout = (events ? 0 : 3000); /* Time in milliseconds */ if (t = timers_first(&main_timeloop)) {