* 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 42a3b3ee896a2e102d8016894fd32f4d601121c1..b9ccc1c4a95c0e172a3f4849061a2f4c047ab5e2 100644 (file)
@@ -1,3 +1,8 @@
+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
index 48e907f49c0709eee7c6c3a7f6f4cec5b65966f6..b03a8b952383cad3e4a23ff47c95987b5d8c43e6 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 */);
 }