diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2023-10-04 17:36:03 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2023-10-04 17:36:03 +0200 |
commit | 6a242b3ec66f2ab89f9277e67125eab3e3676644 (patch) | |
tree | 64943ba43275e2884e8194e7870dd6bcfc9613bc | |
parent | 0bfa216f496279905b843abcfb1242477b86783c (diff) |
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.
-rw-r--r-- | sysdep/unix/io.c | 6 |
1 files 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)) { |