This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch 1/2] Fix cleanups handling mistakes


Hi,

these cases crashed with the testsuite
on {x86_64,x86_64-m32,i686}-fedora19pre-linux-gnu.

I will check it in.


Thanks,
Jan


gdb/
2013-05-01  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* event-top.c (display_gdb_prompt): Call missing do_cleanups.
	* infcmd.c (get_return_value) <!stop_regs>: Do not overwrite CLEANUP.
	* symfile.c (symfile_bfd_open): New variable back_to.  Do not leave
	a stale cleanup.  Fix double free of NAME.

diff --git a/gdb/event-top.c b/gdb/event-top.c
index 10f1499..f00ab7d 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -269,6 +269,7 @@ display_gdb_prompt (char *new_prompt)
 	     rl_callback_handler_remove(), does the job.  */
 
 	  rl_callback_handler_remove ();
+	  do_cleanups (old_chain);
 	  return;
 	}
       else
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index af6a4db..11cdf62 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1452,7 +1452,7 @@ get_return_value (struct value *function, struct type *value_type)
   if (!stop_regs)
     {
       stop_regs = regcache_dup (get_current_regcache ());
-      cleanup = make_cleanup_regcache_xfree (stop_regs);
+      make_cleanup_regcache_xfree (stop_regs);
     }
 
   gdbarch = get_regcache_arch (stop_regs);
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 3e66bd1..5176783 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1699,6 +1699,7 @@ symfile_bfd_open (char *name)
   bfd *sym_bfd;
   int desc;
   char *absolute_name;
+  struct cleanup *back_to;
 
   if (remote_filename_p (name))
     {
@@ -1740,15 +1741,12 @@ symfile_bfd_open (char *name)
 
   xfree (name);
   name = absolute_name;
-  make_cleanup (xfree, name);
+  back_to = make_cleanup (xfree, name);
 
   sym_bfd = gdb_bfd_open (name, gnutarget, desc);
   if (!sym_bfd)
-    {
-      make_cleanup (xfree, name);
-      error (_("`%s': can't open to read symbols: %s."), name,
-	     bfd_errmsg (bfd_get_error ()));
-    }
+    error (_("`%s': can't open to read symbols: %s."), name,
+	   bfd_errmsg (bfd_get_error ()));
   bfd_set_cacheable (sym_bfd, 1);
 
   if (!bfd_check_format (sym_bfd, bfd_object))
@@ -1758,6 +1756,8 @@ symfile_bfd_open (char *name)
 	     bfd_errmsg (bfd_get_error ()));
     }
 
+  do_cleanups (back_to);
+
   return sym_bfd;
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]