From 95e54da724be3b6673da2432d0613e163be03db3 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 8 Sep 2008 21:57:42 +0000 Subject: Remove global continuations in favour of a per-thread continuations. * gdbthread.h (struct thread_info): Add comments around continuations and intermediate_continuations. (save_infrun_state, load_infrun_state): Delete continuations and intermediate_continuations arguments. * infrun.c (fetch_inferior_event): Only call normal_stop if stop_soon is NO_STOP_QUIETLY. (context_switch): Don't context-switch the continuations. * thread.c (clear_thread_inferior_resources): Discard all continuations of the thread we're clearing. (save_infrun_state, load_infrun_state): Delete continuations and intermediate_continuations arguments, and the code referencing them. * utils.c: Include "gdbthread.h". (cmd_continuation, intermediate_continuation): Delete. (add_continuation): Add thread_info* argument. Install the continuation on it. (restore_thread_cleanup): New. (do_all_continuations_ptid, do_all_continuations_thread_callback): New. (do_all_continuations): Reimplement. (discard_all_continuations_thread_callback, discard_all_continuations_thread): New. (discard_all_continuations): Reimplement. (add_intermediate_continuation): Add thread_info* argument. Install the continuation on it. (do_all_intermediate_continuations_thread_callback) (do_all_intermediate_continuations_thread): New. (do_all_intermediate_continuations): Reimplement. (discard_all_intermediate_continuations_thread_callback): New. (discard_all_intermediate_continuations_thread): New. (discard_all_intermediate_continuations): Reimplement. * breakpoint.c (until_break_command): Install the continuation on the current thread. * defs.h (cmd_continuation, intermediate_continuation): Delete. (struct thread_info): Forward declare. (add_continuation, add_intermediate_continuation): Add thread_info* argument. (do_all_continuations_thread, discard_all_continuations_thread) (do_all_intermediate_continuations_thread) (discard_all_intermediate_continuations_thread): Declare. * inf-loop.c (inferior_event_handler): In non-stop only run continuations on the thread that stopped. In all-stop, run continuations on all threads. * infcmd.c (step_once, finish_command): Adjust. --- gdb/defs.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'gdb/defs.h') diff --git a/gdb/defs.h b/gdb/defs.h index e5990c7..8d7e0e4 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -681,22 +681,24 @@ extern void free_command_lines (struct command_line **); when opening an extended-remote connection. */ struct continuation; - -/* In infrun.c. */ -extern struct continuation *cmd_continuation; -/* Used only by the step_1 function. */ -extern struct continuation *intermediate_continuation; +struct thread_info; /* From utils.c */ -extern void add_continuation (void (*)(void *), void *, +extern void add_continuation (struct thread_info *, + void (*)(void *), void *, void (*)(void *)); extern void do_all_continuations (void); +extern void do_all_continuations_thread (struct thread_info *); extern void discard_all_continuations (void); +extern void discard_all_continuations_thread (struct thread_info *); -extern void add_intermediate_continuation (void (*)(void *), void *, +extern void add_intermediate_continuation (struct thread_info *, + void (*)(void *), void *, void (*)(void *)); extern void do_all_intermediate_continuations (void); +extern void do_all_intermediate_continuations_thread (struct thread_info *); extern void discard_all_intermediate_continuations (void); +extern void discard_all_intermediate_continuations_thread (struct thread_info *); /* String containing the current directory (what getwd would return). */ -- cgit v1.1