* mi/mi-main.c (mi_cmd_remove_inferior): Don't delete current inferior.
authorMarc Khouzam <marc.khouzam@ericsson.com>
Sat, 18 Dec 2010 02:10:05 +0000 (02:10 +0000)
committerMarc Khouzam <marc.khouzam@ericsson.com>
Sat, 18 Dec 2010 02:10:05 +0000 (02:10 +0000)
(get_other_inferior): New.

gdb/ChangeLog
gdb/mi/mi-main.c

index 42a3b3e..b9ccc1c 100644 (file)
@@ -1,5 +1,10 @@
 2010-12-17  Marc Khouzam  <marc.khouzam@ericsson.com>
 
+       * mi/mi-main.c (mi_cmd_remove_inferior): Don't delete current inferior.
+       (get_other_inferior): New.
+
+2010-12-17  Marc Khouzam  <marc.khouzam@ericsson.com>
+
        * python/py-progspace.c (py_free_pspace): Obtain arch another
        way to avoid dereferencing a null pointer.
 
index 48e907f..b03a8b9 100644 (file)
@@ -1744,6 +1744,18 @@ mi_cmd_add_inferior (char *command, char **argv, int argc)
   ui_out_field_fmt (uiout, "inferior", "i%d", inf->num);
 }
 
+/* Callback used to find the first inferior other than the
+   current one. */
+   
+static int
+get_other_inferior (struct inferior *inf, void *arg)
+{
+  if (inf == current_inferior ())
+    return 0;
+
+  return 1;
+}
+
 void
 mi_cmd_remove_inferior (char *command, char **argv, int argc)
 {
@@ -1760,6 +1772,22 @@ mi_cmd_remove_inferior (char *command, char **argv, int argc)
   if (!inf)
     error ("the specified thread group does not exist");
 
+  if (inf == current_inferior ())
+    {
+      struct thread_info *tp = 0;
+      struct inferior *new_inferior 
+       = iterate_over_inferiors (get_other_inferior, NULL);
+
+      if (new_inferior == NULL)
+       error (_("Cannot remove last inferior"));
+
+      set_current_inferior (new_inferior);
+      if (new_inferior->pid != 0)
+       tp = any_thread_of_process (new_inferior->pid);
+      switch_to_thread (tp ? tp->ptid : null_ptid);
+      set_current_program_space (new_inferior->pspace);
+    }
+
   delete_inferior_1 (inf, 1 /* silent */);
 }