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 8e399b9b14..959a87d583 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -5048,10 +5048,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; } @@ -5157,10 +5155,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; }