0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2025-03-28 09:17:02 +00:00

IO: Avoid multiple event cycles in one loop cycle.

Event cycle may took too much time and trigger next timer events, so
avoid cycling between timer and event cycles inside the loop cycle.
This commit is contained in:
Ondrej Zajicek (work) 2016-04-06 11:57:28 +02:00
parent 9e7b3ebdf9
commit bd22d7f41d
2 changed files with 6 additions and 1 deletions
proto/bgp
sysdep/unix

@ -668,6 +668,10 @@ bgp_keepalive_timeout(timer *t)
DBG("BGP: Keepalive timer\n");
bgp_schedule_packet(conn, PKT_KEEPALIVE);
/* Kick TX a bit faster */
if (ev_active(conn->tx_ev))
ev_run(conn->tx_ev);
}
static void

@ -2055,12 +2055,13 @@ io_loop(void)
for(;;)
{
events = ev_run_list(&global_event_list);
timers:
update_times();
tout = tm_first_shot();
if (tout <= now)
{
tm_shot();
continue;
goto timers;
}
poll_tout = (events ? 0 : MIN(tout - now, 3)) * 1000; /* Time in milliseconds */