From 57bf2d7ed85a9edec723fbfb4871c78b29143c2d Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Sat, 18 Dec 2010 02:10:05 +0000 Subject: [PATCH] * mi/mi-main.c (mi_cmd_remove_inferior): Don't delete current inferior. (get_other_inferior): New. --- gdb/ChangeLog | 5 +++++ gdb/mi/mi-main.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 42a3b3e..b9ccc1c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 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 way to avoid dereferencing a null pointer. diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 48e907f..b03a8b9 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 */); } -- 2.7.4