cleanup fixes for remote-mips.c
authorTom Tromey <tromey@redhat.com>
Thu, 30 May 2013 17:03:00 +0000 (17:03 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 30 May 2013 17:03:00 +0000 (17:03 +0000)
remote-mips.c has a few 'return's where cleanups are not run.

* remote-mips.c (mips_exit_debug): Call do_cleanups on all
return paths.
(mips_initialize): Likewise.
(common_open): Call do_cleanups.

gdb/ChangeLog
gdb/remote-mips.c

index 4005a63..ea1d341 100644 (file)
@@ -1,5 +1,12 @@
 2013-05-30  Tom Tromey  <tromey@redhat.com>
 
+       * remote-mips.c (mips_exit_debug): Call do_cleanups on all
+       return paths.
+       (mips_initialize): Likewise.
+       (common_open): Call do_cleanups.
+
+2013-05-30  Tom Tromey  <tromey@redhat.com>
+
        * utils.c (internal_vproblem): Call do_cleanups.
 
 2013-05-30  Tom Tromey  <tromey@redhat.com>
index 3b65b59..1619622 100644 (file)
@@ -1386,13 +1386,19 @@ mips_exit_debug (void)
       mips_request ('x', 0, 0, NULL, mips_receive_wait, NULL);
       mips_need_reply = 0;
       if (!mips_expect (" break!"))
-       return -1;
+       {
+         do_cleanups (old_cleanups);
+         return -1;
+       }
     }
   else
     mips_request ('x', 0, 0, &err, mips_receive_wait, NULL);
 
   if (!mips_expect (mips_monitor_prompt))
-    return -1;
+    {
+      do_cleanups (old_cleanups);
+      return -1;
+    }
 
   do_cleanups (old_cleanups);
 
@@ -1406,7 +1412,7 @@ static void
 mips_initialize (void)
 {
   int err;
-  struct cleanup *old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
+  struct cleanup *old_cleanups;
   int j;
 
   /* What is this code doing here?  I don't see any way it can happen, and
@@ -1419,6 +1425,8 @@ mips_initialize (void)
       return;
     }
 
+  old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
+
   mips_wait_flag = 0;
   mips_initializing = 1;
 
@@ -1543,6 +1551,7 @@ common_open (struct target_ops *ops, char *name, int from_tty,
   char *remote_name = 0;
   char *local_name = 0;
   char **argv;
+  struct cleanup *cleanup;
 
   if (name == 0)
     error (_("\
@@ -1558,7 +1567,7 @@ seen from the board via TFTP, specify that name as the third parameter.\n"));
   /* Parse the serial port name, the optional TFTP name, and the
      optional local TFTP name.  */
   argv = gdb_buildargv (name);
-  make_cleanup_freeargv (argv);
+  cleanup = make_cleanup_freeargv (argv);
 
   serial_port_name = xstrdup (argv[0]);
   if (argv[1])                 /* Remote TFTP name specified?  */
@@ -1655,6 +1664,8 @@ seen from the board via TFTP, specify that name as the third parameter.\n"));
   stop_pc = regcache_read_pc (get_current_regcache ());
   print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
   xfree (serial_port_name);
+
+  do_cleanups (cleanup);
 }
 
 /* Open a connection to an IDT board.  */