summaryrefslogtreecommitdiff
path: root/bgpd/bgp_aspath.c
diff options
context:
space:
mode:
authorpaul <paul>2006-01-16 12:01:29 +0000
committerpaul <paul>2006-01-16 12:01:29 +0000
commit8fdc32ab9a81cb80296d322346867c8c3d2b2b37 (patch)
treebed62ebe30b81035f9ee9f5f605c1f443ad01c25 /bgpd/bgp_aspath.c
parent02335429e8cf2afc191fd518a3b55564bf6e5b2c (diff)
[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.c27
1 files changed, 19 insertions, 8 deletions
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 *