0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-11-08 12:18:42 +00:00

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.
This commit is contained in:
Ondrej Zajicek 2023-10-04 17:36:03 +02:00
parent 0bfa216f49
commit 6a242b3ec6

View File

@ -2226,12 +2226,12 @@ io_loop(void)
for(;;) for(;;)
{ {
times_update(&main_timeloop); times_update(&main_timeloop);
events = ev_run_list(&global_event_list); ev_run_list(&global_event_list);
events = ev_run_list_limited(&global_work_list, WORK_EVENTS_MAX) || events; ev_run_list_limited(&global_work_list, WORK_EVENTS_MAX);
timers_fire(&main_timeloop); timers_fire(&main_timeloop);
io_close_event(); io_close_event();
// FIXME events = !EMPTY_LIST(global_event_list) || !EMPTY_LIST(global_work_list);
poll_tout = (events ? 0 : 3000); /* Time in milliseconds */ poll_tout = (events ? 0 : 3000); /* Time in milliseconds */
if (t = timers_first(&main_timeloop)) if (t = timers_first(&main_timeloop))
{ {