From: Marc Khouzam Date: Sat, 18 Dec 2010 02:10:05 +0000 (+0000) Subject: * mi/mi-main.c (mi_cmd_remove_inferior): Don't delete current inferior. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=57bf2d7ed85a9edec723fbfb4871c78b29143c2d;p=binutils-gdb.git * mi/mi-main.c (mi_cmd_remove_inferior): Don't delete current inferior. (get_other_inferior): New. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 42a3b3ee896..b9ccc1c4a95 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-12-17 Marc Khouzam + + * mi/mi-main.c (mi_cmd_remove_inferior): Don't delete current inferior. + (get_other_inferior): New. + 2010-12-17 Marc Khouzam * python/py-progspace.c (py_free_pspace): Obtain arch another diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 48e907f49c0..b03a8b95238 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -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 */); }