summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2022-07-28 11:30:11 -0400
committerGitHub <noreply@github.com>2022-07-28 11:30:11 -0400
commitdda5a082af89b1afd405739205ef75196cb40fcc (patch)
tree00c96faf2270a6a91a150e4baa621f3137e58648
parent9982282d41466f6be1422a7610774fb0421ba8da (diff)
parenta25ae82fd4d419b9bf22ba26f0dcad91f349a578 (diff)
Merge pull request #11693 from opensourcerouting/fix/unlock_bgp_dest
bgpd: Unlock bgp_node after bgp_node_lookup
-rw-r--r--bgpd/bgp_bmp.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c
index cf196f7390..ab557465f5 100644
--- a/bgpd/bgp_bmp.c
+++ b/bgpd/bgp_bmp.c
@@ -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;
}