diff options
author | paul <paul> | 2006-01-16 13:01:29 +0100 |
---|---|---|
committer | paul <paul> | 2006-01-16 13:01:29 +0100 |
commit | 8fdc32ab9a81cb80296d322346867c8c3d2b2b37 (patch) | |
tree | bed62ebe30b81035f9ee9f5f605c1f443ad01c25 /bgpd/bgp_aspath.c | |
parent | [bgpd] fix some leaks introduced in aspath rewrite. (diff) | |
download | frr-8fdc32ab9a81cb80296d322346867c8c3d2b2b37.tar.xz frr-8fdc32ab9a81cb80296d322346867c8c3d2b2b37.zip |
[bgpd] add aspath_finish, static resource cleanup function.
2006-01-16 Paul Jakma <paul.jakma@sun.com>
* 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.
Diffstat (limited to 'bgpd/bgp_aspath.c')
-rw-r--r-- | bgpd/bgp_aspath.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c index a6b77bbb8..e9a6d6a28 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 * |