[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 *