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/bgp_aspath.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'bgpd/bgp_aspath.c') 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 * -- cgit v1.2.1