* dwarfread.c (free_utypes): New function.
authorFred Fish <fnf@specifix.com>
Fri, 16 Feb 1996 21:46:02 +0000 (21:46 +0000)
committerFred Fish <fnf@specifix.com>
Fri, 16 Feb 1996 21:46:02 +0000 (21:46 +0000)
(read_file_scope): Call free_utypes as cleanup, rather than just
  freeing the utypes pointer.

gdb/ChangeLog
gdb/dwarfread.c

index 37fd73a093ca81723aff8a072c7799f455e2f6cf..b2f631d7b8b27d2f2e8704412c26aef99f9c87cd 100644 (file)
@@ -1,3 +1,9 @@
+Fri Feb 16 10:02:34 1996  Fred Fish  <fnf@cygnus.com>
+
+       * dwarfread.c (free_utypes): New function.
+       (read_file_scope): Call free_utypes as cleanup, rather than just
+       freeing the utypes pointer.
+
 Thu Feb 15 21:40:52 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * demangle.c (is_cplus_marker):  New function, checks if a
index 3d034e1ea079c8549134b7810fdc0f0d4ba0b9b4..fb0234cd544ef5fdebca9a6f9e175ff51cb8d9bf 100644 (file)
@@ -894,6 +894,33 @@ alloc_utype (die_ref, utypep)
   return (utypep);
 }
 
+/*
+
+LOCAL FUNCTION
+
+       free_utypes -- free the utypes array and reset pointer & count
+
+SYNOPSIS
+
+       static void free_utypes (PTR dummy)
+
+DESCRIPTION
+
+       Called via do_cleanups to free the utypes array, reset the pointer to NULL,
+       and set numutypes back to zero.  This ensures that the utypes does not get
+       referenced after being freed.
+ */
+
+static void
+free_utypes (dummy)
+     PTR dummy;
+{
+  free (utypes);
+  utypes = NULL;
+  numutypes = 0;
+}
+
+
 /*
 
 LOCAL FUNCTION
@@ -1935,7 +1962,7 @@ read_file_scope (dip, thisdie, enddie, objfile)
     }
   numutypes = (enddie - thisdie) / 4;
   utypes = (struct type **) xmalloc (numutypes * sizeof (struct type *));
-  back_to = make_cleanup (free, utypes);
+  back_to = make_cleanup (free_utypes, NULL);
   memset (utypes, 0, numutypes * sizeof (struct type *));
   memset (ftypes, 0, FT_NUM_MEMBERS * sizeof (struct type *));
   start_symtab (dip -> at_name, dip -> at_comp_dir, dip -> at_low_pc);
@@ -1948,8 +1975,6 @@ read_file_scope (dip, thisdie, enddie, objfile)
       symtab -> language = cu_language;
     }      
   do_cleanups (back_to);
-  utypes = NULL;
-  numutypes = 0;
 }
 
 /*