]> git.saurik.com Git - bison.git/commitdiff
Fix some memory leaks.
authorAlex Rozenman <rozenman@gmail.com>
Fri, 24 Jul 2009 18:04:16 +0000 (21:04 +0300)
committerAlex Rozenman <rozenman@gmail.com>
Fri, 24 Jul 2009 18:04:16 +0000 (21:04 +0300)
* src/named-ref.c: Add a pointer check (named_ref_free).
* src/scan-code.l: New function (variant_table_free). Called in
code_scanner_free.
* src/symlist.c: Call to named_ref_free (symbol_list_free).

ChangeLog
src/named-ref.c
src/scan-code.l
src/symlist.c

index 01870f6d6b952734bbe10ca9916134e3a304c2c9..7e2844a3352c5b17333ca5997ad2104eaeee7319 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-07-24  Alex Rozenman  <rozenmam@gmail.com>
+
+       Fix some memory leaks.
+       * src/named-ref.c: Add a pointer check (named_ref_free).
+       * src/scan-code.l: New function (variant_table_free). Called in
+       code_scanner_free.
+       * src/symlist.c: Call to named_ref_free (symbol_list_free).
+
 2009-07-24  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        * src/lalr.c (state_lookahead_tokens_count): Correct comment.
index 4388acba88706f8106190164ee2050881fc27d15..41d9dc17f7a440276b5d7f5c12ded14291a40957 100644 (file)
@@ -36,6 +36,7 @@ named_ref_new (uniqstr id, location loc)
 void
 named_ref_free (named_ref *r)
 {
-  free (r);
+  if (r)
+    free (r);
 }
 
index 78cf839467272785e2889552722e3f6033811bca..aaaaaed0b9a6bc638c3fbe2591268ba52b6d586e 100644 (file)
@@ -351,6 +351,15 @@ variant_table_grow ()
   return &variant_table[variant_count - 1];
 }
 
+static void
+variant_table_free ()
+{
+  if (variant_table)
+    free (variant_table);
+  variant_table = 0;
+  variant_table_size = variant_count = 0;
+}
+
 static char *
 find_prefix_end (const char *prefix, char *begin, char *end)
 {
@@ -866,6 +875,8 @@ void
 code_scanner_free (void)
 {
   obstack_free (&obstack_for_string, 0);
+  variant_table_free ();
+
   /* Reclaim Flex's buffers.  */
   yylex_destroy ();
 }
index b3500d2dbbe336b044536c67ac74907896dd4b54..1ffad2b62109f9e776ea2be1b21603977da6f939 100644 (file)
@@ -146,7 +146,14 @@ symbol_list_prepend (symbol_list *list, symbol_list *node)
 void
 symbol_list_free (symbol_list *list)
 {
-  LIST_FREE (symbol_list, list);
+  symbol_list *node, *next;
+  for (node = list; node; node = next)
+    {
+      next = node->next;
+      if (node->named_ref)
+        named_ref_free (node->named_ref);
+      free (node);
+    }
 }