Commit e8de8584 authored by Ondrej Zajicek (work)'s avatar Ondrej Zajicek (work) Committed by Pavel Tvrdik
Browse files

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.
parent 4fa4e940
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -670,6 +670,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
+2 −1
Original line number Diff line number Diff line
@@ -2050,12 +2050,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 */