From: Donatas Abraitis Date: Fri, 11 Jun 2021 06:17:05 +0000 (+0300) Subject: bgpd: Call bgp_dest_unlock_node() inside bgp_adj_in_remove() X-Git-Tag: frr-8.0.1~61^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=9ea60f3f4a6a90967cb320364f111470bbfc51ff;p=matthieu%2Ffrr.git bgpd: Call bgp_dest_unlock_node() inside bgp_adj_in_remove() Signed-off-by: Donatas Abraitis (cherry picked from commit 6a840fd93f147e69e5546618ad7e1001cb819c4a) --- diff --git a/bgpd/bgp_advertise.c b/bgpd/bgp_advertise.c index 1ebe4e5b53..9da97d110f 100644 --- a/bgpd/bgp_advertise.c +++ b/bgpd/bgp_advertise.c @@ -205,6 +205,7 @@ void bgp_adj_in_remove(struct bgp_dest *dest, struct bgp_adj_in *bai) { bgp_attr_unintern(&bai->attr); BGP_ADJ_IN_DEL(dest, bai); + bgp_dest_unlock_node(dest); peer_unlock(bai->peer); /* adj_in peer reference */ XFREE(MTYPE_BGP_ADJ_IN, bai); } @@ -223,10 +224,8 @@ bool bgp_adj_in_unset(struct bgp_dest *dest, struct peer *peer, while (adj) { adj_next = adj->next; - if (adj->peer == peer && adj->addpath_rx_id == addpath_id) { + if (adj->peer == peer && adj->addpath_rx_id == addpath_id) bgp_adj_in_remove(dest, adj); - bgp_dest_unlock_node(dest); - } adj = adj_next; } diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 1c24492ef5..5344f92bb8 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -4822,10 +4822,8 @@ static void bgp_clear_route_table(struct peer *peer, afi_t afi, safi_t safi, while (ain) { ain_next = ain->next; - if (ain->peer == peer) { + if (ain->peer == peer) bgp_adj_in_remove(dest, ain); - bgp_dest_unlock_node(dest); - } ain = ain_next; } @@ -4931,10 +4929,8 @@ void bgp_clear_adj_in(struct peer *peer, afi_t afi, safi_t safi) while (ain) { ain_next = ain->next; - if (ain->peer == peer) { + if (ain->peer == peer) bgp_adj_in_remove(dest, ain); - bgp_dest_unlock_node(dest); - } ain = ain_next; }