From 09b453775541a66439ddb5b0c24c5f8b3a04928c Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Thu, 3 Aug 2023 22:48:40 +0300 Subject: [PATCH] bgpd: Handle transit attributes the same way as others using setters/getters To be consistent and error-safe. Signed-off-by: Donatas Abraitis --- bgpd/bgp_attr.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index 1321ab32c0..cca2ca2b0f 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -421,6 +421,9 @@ static struct transit *transit_intern(struct transit *transit) static void transit_unintern(struct transit **transit) { + if (!*transit) + return; + if ((*transit)->refcnt) (*transit)->refcnt--; @@ -1186,6 +1189,7 @@ void bgp_attr_unintern_sub(struct attr *attr) struct cluster_list *cluster; struct lcommunity *lcomm = NULL; struct community *comm = NULL; + struct transit *transit; /* aspath refcount shoud be decrement. */ aspath_unintern(&attr->aspath); @@ -1211,12 +1215,9 @@ void bgp_attr_unintern_sub(struct attr *attr) cluster_unintern(&cluster); bgp_attr_set_cluster(attr, NULL); - struct transit *transit = bgp_attr_get_transit(attr); - - if (transit) { - transit_unintern(&transit); - bgp_attr_set_transit(attr, transit); - } + transit = bgp_attr_get_transit(attr); + transit_unintern(&transit); + bgp_attr_set_transit(attr, NULL); if (attr->encap_subtlvs) encap_unintern(&attr->encap_subtlvs, ENCAP_SUBTLV_TYPE);