aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcmd.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2008-09-08 21:57:42 +0000
committerPedro Alves <palves@redhat.com>2008-09-08 21:57:42 +0000
commit95e54da724be3b6673da2432d0613e163be03db3 (patch)
treebf4bbf09a3d60fb10e4c05534f61378ecc436047 /gdb/infcmd.c
parent414c69f7a7e241fd4a4cb85535d864d48ddbee1f (diff)
downloadgdb-95e54da724be3b6673da2432d0613e163be03db3.zip
gdb-95e54da724be3b6673da2432d0613e163be03db3.tar.gz
gdb-95e54da724be3b6673da2432d0613e163be03db3.tar.bz2
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.
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r--gdb/infcmd.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index a4c6c94..8bcfd63 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -947,7 +947,7 @@ which has no line number information.\n"), name);
if (skip_subroutines)
tp->step_over_calls = STEP_OVER_ALL;
- inferior_thread ()->step_multi = (count > 1);
+ tp->step_multi = (count > 1);
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
args = xmalloc (sizeof (*args));
@@ -955,7 +955,7 @@ which has no line number information.\n"), name);
args->single_inst = single_inst;
args->count = count;
args->thread = thread;
- add_intermediate_continuation (step_1_continuation, args, xfree);
+ add_intermediate_continuation (tp, step_1_continuation, args, xfree);
}
}
@@ -1440,7 +1440,7 @@ finish_command (char *arg, int from_tty)
cargs->breakpoint = breakpoint;
cargs->function = function;
- add_continuation (finish_command_continuation, cargs,
+ add_continuation (tp, finish_command_continuation, cargs,
finish_command_continuation_free_arg);
discard_cleanups (old_chain);
@@ -2103,7 +2103,8 @@ attach_command (char *args, int from_tty)
a->args = xstrdup (args);
a->from_tty = from_tty;
a->async_exec = async_exec;
- add_continuation (attach_command_continuation, a,
+ add_continuation (inferior_thread (),
+ attach_command_continuation, a,
attach_command_continuation_free_args);
return;
}