From: Ondrej Zajicek Date: Wed, 4 Oct 2023 15:36:03 +0000 (+0200) Subject: IO: Fix race condition in event processing X-Git-Tag: v2.14~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a242b3ec66f2ab89f9277e67125eab3e3676644;p=thirdparty%2Fbird.git 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. --- diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 6aedcfb66..4b3eef486 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)) {