From 8fdc32ab9a81cb80296d322346867c8c3d2b2b37 Mon Sep 17 00:00:00 2001 From: paul Date: Mon, 16 Jan 2006 12:01:29 +0000 Subject: [bgpd] add aspath_finish, static resource cleanup function. 2006-01-16 Paul Jakma * bgp_aspath.c: (aspath_snmp_pathseg) move the static stream pointer out to file scope, so it can be freed. (aspath_finish) new function, free aspath resources. * bgp_aspath.h: (aspath_finish) export. --- bgpd/ChangeLog | 4 ++++ bgpd/bgp_aspath.c | 27 +++++++++++++++++++-------- bgpd/bgp_aspath.h | 1 + 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog index ece8c4bd..b555334b 100644 --- a/bgpd/ChangeLog +++ b/bgpd/ChangeLog @@ -7,6 +7,10 @@ (aspath_parse) aspath_hash_alloc dupes the entire aspath, including segments, but we forgot to free the temporary assegment. + (aspath_snmp_pathseg) move the static stream pointer out to + file scope, so it can be freed. + (aspath_finish) new function, free aspath resources. + * bgp_aspath.h: (aspath_finish) export. 2006-01-10 Juris Kalnins diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c index a6b77bbb..e9a6d6a2 100644 --- a/bgpd/bgp_aspath.c +++ b/bgpd/bgp_aspath.c @@ -78,6 +78,9 @@ struct assegment_header /* Hash for aspath. This is the top level structure of AS path. */ struct hash *ashash; + +/* Stream for SNMP. See aspath_snmp_pathseg */ +static struct stream *snmp_stream; static inline as_t * assegment_data_new (int num) @@ -769,22 +772,21 @@ u_char * aspath_snmp_pathseg (struct aspath *as, size_t *varlen) { #define SNMP_PATHSEG_MAX 1024 - static struct stream *s = NULL; - - if (!s) - s = stream_new (SNMP_PATHSEG_MAX); + + if (!snmp_stream) + snmp_stream = stream_new (SNMP_PATHSEG_MAX); else - stream_reset (s); + stream_reset (snmp_stream); if (!as) { *varlen = 0; return NULL; } - aspath_put (s, as); + aspath_put (snmp_stream, as); - *varlen = stream_get_endp (s); - return stream_pnt(s); + *varlen = stream_get_endp (snmp_stream); + return stream_pnt(snmp_stream); } #define min(A,B) ((A) < (B) ? (A) : (B)) @@ -1488,6 +1490,15 @@ aspath_init (void) { ashash = hash_create_size (32767, aspath_key_make, aspath_cmp); } + +void +aspath_finish (void) +{ + hash_free (ashash); + + if (snmp_stream) + stream_free (snmp_stream); +} /* return and as path value */ const char * diff --git a/bgpd/bgp_aspath.h b/bgpd/bgp_aspath.h index adf58517..7fa7f20b 100644 --- a/bgpd/bgp_aspath.h +++ b/bgpd/bgp_aspath.h @@ -60,6 +60,7 @@ struct aspath /* Prototypes. */ extern void aspath_init (void); +extern void aspath_finish (void); extern struct aspath *aspath_parse (struct stream *, size_t); extern struct aspath *aspath_dup (struct aspath *); extern struct aspath *aspath_aggregate (struct aspath *, struct aspath *); -- cgit v1.2.1