[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.
diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c
index a6b77bb..e9a6d6a 100644
--- a/bgpd/bgp_aspath.c
+++ b/bgpd/bgp_aspath.c
@@ -78,6 +78,9 @@
/* 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 @@
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 @@
{
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 *