mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Workaround for stupid callback scheduler.
There is no reak callback scheduler and previous behavior causes bad things during hard congestion (like BGP hold timeouts). Smart callback scheduler is still missing, but main loop was changed such that it first processes all tx callbacks (which are fast enough) (but max 4* per socket) + rx callbacks for CLI, and in the second phase it processes one rx callback per socket up to four sockets (as rx callback can be slow when there are too many protocols, because route redistribution is done synchronously inside rx callback). If there is event callback ready, second phase is skipped in 90% of iterations (to speed up CLI during congestion).
This commit is contained in:
@@ -431,8 +431,15 @@ bgp_hold_timeout(timer *t)
|
||||
{
|
||||
struct bgp_conn *conn = t->data;
|
||||
|
||||
DBG("BGP: Hold timeout, closing connection\n");
|
||||
bgp_error(conn, 4, 0, NULL, 0);
|
||||
DBG("BGP: Hold timeout\n");
|
||||
|
||||
/* If there is something in input queue, we are probably congested
|
||||
and perhaps just not processed BGP packets in time. */
|
||||
|
||||
if (sk_rx_ready(conn->sk) > 0)
|
||||
bgp_start_timer(conn->hold_timer, 10);
|
||||
else
|
||||
bgp_error(conn, 4, 0, NULL, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Reference in New Issue
Block a user