]> 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)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 11 Jun 2021 06:39:23 +0000 (09:39 +0300)
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
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 8438621f683b88860e86db67bd2fdc243e8e0f2e..86a7da00577196f1462e3c189657624109a29735 100644 (file)
@@ -4826,10 +4826,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;
                }
@@ -4935,10 +4933,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;
                }