From 7e1789f556ec6ba5c736abcb81e0a08ba31673ab Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 18 May 2009 00:58:38 +0000 Subject: * inflow.h (our_process_group): Remove declaration. (inferior_process_group): Delete global variable declaration. (inferior_process_group): New function declaration. * inflow.c: Include observer.h. (inferior_ttystate, our_ttystate, tflags_inferior, tflags_ours): Delete. (struct terminal_info): New struct. (our_terminal_info): New global. (inferior_process_group): New function. (inferior_thisrun_terminal): Extend description comment. (gdb_has_a_terminal): Adjust to write to our_terminal_info fields instead of globals. (terminal_init_inferior_with_pgrp): Adjust to per-inferior terminal settings. (terminal_inferior): Ditto. (terminal_ours_1): Ditto. (inflow_new_inferior, inflow_inferior_exit): New functions. (child_terminal_info): Adjust to per-inferior terminal settings. (osig_set): New global. (set_sigint_trap): Adjust to per-inferior terminal settings. Set or clear `osig_set' accordingly. (clear_sigint_trap): Check `osig_set' to decide wheater to restore SIGINT handler, instead of checking the current inferior (which may be none). (_initialize_inflow): Attach inflow_new_inferior and inflow_inferior_exit to the "new_inferior" and "inferior_exit" notifications, respectively. * inferior.h (struct terminal_info): Forward declare. (struct inferior): Add `terminal_info' field. * inferior.c (delete_inferior_1): Notify the inferior_exit observers before removing the inferior from the lists and deleting it. * inf-ptrace.c (inf_ptrace_stop): `inferior_process_group' is now a function instead of a variable. Adjust. * procfs.c (procfs_stop): Ditto. --- gdb/inferior.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'gdb/inferior.c') diff --git a/gdb/inferior.c b/gdb/inferior.c index e19a898..e060a1b 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -139,19 +139,21 @@ delete_inferior_1 (int pid, int silent) if (!inf) return; - if (infprev) - infprev->next = inf->next; - else - inferior_list = inf->next; - - free_inferior (inf); - arg.pid = pid; arg.silent = silent; iterate_over_threads (delete_thread_of_inferior, &arg); + /* Notify the observers before removing the inferior from the list, + so that the observers have a change to look it up. */ observer_notify_inferior_exit (pid); + + if (infprev) + infprev->next = inf->next; + else + inferior_list = inf->next; + + free_inferior (inf); } void -- cgit v1.1