]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Unlock bgp_node after bgp_node_lookup
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 27 Jul 2022 11:51:15 +0000 (14:51 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 28 Jul 2022 11:36:38 +0000 (14:36 +0300)
bgp_node_lookup increments lock, we should decrement it after use.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_bmp.c

index cf196f7390af3cf6452e24bde03e45a0a452574c..ab557465f57173f668680bd46b221d6b01d4ac34 100644 (file)
@@ -992,7 +992,7 @@ afibreak:
        }
 
        struct bgp_table *table = bmp->targets->bgp->rib[afi][safi];
-       struct bgp_dest *bn;
+       struct bgp_dest *bn = NULL;
        struct bgp_path_info *bpi = NULL, *bpiter;
        struct bgp_adj_in *adjin = NULL, *adjiter;
 
@@ -1120,6 +1120,9 @@ afibreak:
                bmp_monitor(bmp, adjin->peer, 0, bn_p, prd, adjin->attr, afi,
                            safi, adjin->uptime);
 
+       if (bn)
+               bgp_dest_unlock_node(bn);
+
        return true;
 }
 
@@ -1145,7 +1148,7 @@ static bool bmp_wrqueue(struct bmp *bmp, struct pullwr *pullwr)
 {
        struct bmp_queue_entry *bqe;
        struct peer *peer;
-       struct bgp_dest *bn;
+       struct bgp_dest *bn = NULL;
        bool written = false;
 
        bqe = bmp_pull(bmp);
@@ -1220,6 +1223,10 @@ static bool bmp_wrqueue(struct bmp *bmp, struct pullwr *pullwr)
 out:
        if (!bqe->refcount)
                XFREE(MTYPE_BMP_QUEUE, bqe);
+
+       if (bn)
+               bgp_dest_unlock_node(bn);
+
        return written;
 }