]> git.puffer.fish Git - matthieu/frr.git/commitdiff
[bgpd] add aspath_finish, static resource cleanup function.
authorpaul <paul>
Mon, 16 Jan 2006 12:01:29 +0000 (12:01 +0000)
committerpaul <paul>
Mon, 16 Jan 2006 12:01:29 +0000 (12:01 +0000)
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.

bgpd/ChangeLog
bgpd/bgp_aspath.c
bgpd/bgp_aspath.h

index ece8c4bdb98fdb626830ad22235cf43f574a450f..b555334b3b957986799ad18a5ab22d5e42cfa4ae 100644 (file)
@@ -7,6 +7,10 @@
          (aspath_parse) aspath_hash_alloc dupes the entire aspath,
          including segments, but we forgot to free the temporary
          assegment.
+         (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.
 
 2006-01-10 Juris Kalnins <juris@mt.lv>
 
index a6b77bbb86d40ba41effc90e842da3eb39911861..e9a6d6a2894bb6499598634a0c31d703e024fd8d 100644 (file)
@@ -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;
 \f
 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);
+}
 \f
 /* return and as path value */
 const char *
index adf5851714ec5ea2c45051554b03e7eccf98dac6..7fa7f20ba04befb7b716c8cf6ce28bdc12574b62 100644 (file)
@@ -60,6 +60,7 @@ struct aspath
 
 /* Prototypes. */
 extern void aspath_init (void);
+extern void aspath_finish (void);
 extern struct aspath *aspath_parse (struct stream *, size_t);
 extern struct aspath *aspath_dup (struct aspath *);
 extern struct aspath *aspath_aggregate (struct aspath *, struct aspath *);