diff options
Diffstat (limited to 'bgpd/bgp_route.h')
-rw-r--r-- | bgpd/bgp_route.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index e5987972..3e65bb10 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -174,8 +174,25 @@ extern void bgp_clear_route_all (struct peer *); extern void bgp_clear_adj_in (struct peer *, afi_t, safi_t); extern void bgp_clear_stale_route (struct peer *, afi_t, safi_t); -extern struct bgp_info *bgp_info_lock (struct bgp_info *); -extern struct bgp_info *bgp_info_unlock (struct bgp_info *); +extern void bgp_info_free (struct bgp_info *); + +static inline struct bgp_info * +bgp_info_lock (struct bgp_info *binfo) +{ + binfo->lock++; + return binfo; +} + +static inline void +bgp_info_unlock (struct bgp_info *binfo) +{ + assert (binfo && binfo->lock > 0); + binfo->lock--; + + if (binfo->lock == 0) + bgp_info_free (binfo); +} + extern void bgp_info_add (struct bgp_node *rn, struct bgp_info *ri); extern void bgp_info_delete (struct bgp_node *rn, struct bgp_info *ri); extern struct bgp_info_extra *bgp_info_extra_get (struct bgp_info *); |