bgpd: kill bgp_attr_refcount()

This attempt at optimization has cost us more than a week's worth of
time on several people hunting down the subtle bug that it was missing
an increment on attr->lcommunity.

This is absolutely not worth the maintenance cost.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
David Lamparter 2017-09-07 14:24:00 +02:00
parent 96099b4030
commit 7c87afac92
3 changed files with 1 additions and 41 deletions

View File

@ -771,45 +771,6 @@ struct attr *bgp_attr_intern(struct attr *attr)
return find;
}
/**
* Increment the refcount on various structures that attr holds.
* Note on usage: call _only_ when the 'attr' object has already
* been 'intern'ed and exists in 'attrhash' table. The function
* serves to hold a reference to that (real) object.
* Note also that the caller can safely call bgp_attr_unintern()
* after calling bgp_attr_refcount(). That would release the
* reference and could result in a free() of the attr object.
*/
struct attr *bgp_attr_refcount(struct attr *attr)
{
/* Intern referenced strucutre. */
if (attr->aspath)
attr->aspath->refcnt++;
if (attr->community)
attr->community->refcnt++;
if (attr->ecommunity)
attr->ecommunity->refcnt++;
if (attr->cluster)
attr->cluster->refcnt++;
if (attr->transit)
attr->transit->refcnt++;
if (attr->encap_subtlvs)
attr->encap_subtlvs->refcnt++;
#if ENABLE_BGP_VNC
if (attr->vnc_subtlvs)
attr->vnc_subtlvs->refcnt++;
#endif
attr->refcnt++;
return attr;
}
/* Make network statement's attribute. */
struct attr *bgp_attr_default_set(struct attr *attr, u_char origin)
{

View File

@ -241,7 +241,6 @@ extern void bgp_attr_dup(struct attr *, struct attr *);
extern void bgp_attr_deep_dup(struct attr *, struct attr *);
extern void bgp_attr_deep_free(struct attr *);
extern struct attr *bgp_attr_intern(struct attr *attr);
extern struct attr *bgp_attr_refcount(struct attr *attr);
extern void bgp_attr_unintern_sub(struct attr *);
extern void bgp_attr_unintern(struct attr **);
extern void bgp_attr_flush(struct attr *);

View File

@ -1185,7 +1185,7 @@ static void update_subgroup_copy_adj_out(struct update_subgroup *source,
aout_copy =
bgp_adj_out_alloc(dest, aout->rn, aout->addpath_tx_id);
aout_copy->attr =
aout->attr ? bgp_attr_refcount(aout->attr) : NULL;
aout->attr ? bgp_attr_intern(aout->attr) : NULL;
}
}