]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Call bgp_dest_unlock_node() inside bgp_adj_in_remove()
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 11 Jun 2021 06:17:05 +0000 (09:17 +0300)
committermergify-bot <noreply@mergify.io>
Sat, 24 Jul 2021 15:46:42 +0000 (15:46 +0000)
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
(cherry picked from commit 6a840fd93f147e69e5546618ad7e1001cb819c4a)

bgpd/bgp_advertise.c
bgpd/bgp_route.c

index 1ebe4e5b53b158f7e8329aaf86e40316e2f0c606..9da97d110fb4f6631d831b63b5f5134bcf7fd15b 100644 (file)
@@ -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;
        }
index 1c24492ef553654bd07f766b33e14e4a7d8b8de8..5344f92bb8b8d587f9f26539d1d7bc335df4e0b2 100644 (file)
@@ -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;
                }