mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-29 06:29:40 +00:00
bgpd: avoid heap fragmentation in bgp_clear_route_table
In bgp_clear_route_table, moved cleanup code before the allocation of the work queue items. This returns the memory to the system allocator before allocating new and might therefore help avoiding heap fragmentation. * bgp_route.c: (bgp_clear_route_table) moved code blocks. Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net> Reviewed-by: Leonid Rosenboim <Leonid.Rosenboim@windriver.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
ebbb5fca5c
commit
24e50f2013
@ -2842,6 +2842,21 @@ bgp_clear_route_table (struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
* this may actually be achievable. It doesn't seem to be a huge
|
* this may actually be achievable. It doesn't seem to be a huge
|
||||||
* problem at this time,
|
* problem at this time,
|
||||||
*/
|
*/
|
||||||
|
for (ain = rn->adj_in; ain; ain = ain->next)
|
||||||
|
if (ain->peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
|
||||||
|
{
|
||||||
|
bgp_adj_in_remove (rn, ain);
|
||||||
|
bgp_unlock_node (rn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (aout = rn->adj_out; aout; aout = aout->next)
|
||||||
|
if (aout->peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
|
||||||
|
{
|
||||||
|
bgp_adj_out_remove (rn, aout, peer, afi, safi);
|
||||||
|
bgp_unlock_node (rn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (ri = rn->info; ri; ri = ri->next)
|
for (ri = rn->info; ri; ri = ri->next)
|
||||||
if (ri->peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
|
if (ri->peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
|
||||||
{
|
{
|
||||||
@ -2857,21 +2872,6 @@ bgp_clear_route_table (struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
work_queue_add (peer->clear_node_queue, cnq);
|
work_queue_add (peer->clear_node_queue, cnq);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ain = rn->adj_in; ain; ain = ain->next)
|
|
||||||
if (ain->peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
|
|
||||||
{
|
|
||||||
bgp_adj_in_remove (rn, ain);
|
|
||||||
bgp_unlock_node (rn);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for (aout = rn->adj_out; aout; aout = aout->next)
|
|
||||||
if (aout->peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
|
|
||||||
{
|
|
||||||
bgp_adj_out_remove (rn, aout, peer, afi, safi);
|
|
||||||
bgp_unlock_node (rn);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user