diff options
author | Pedro Alves <palves@redhat.com> | 2011-05-30 18:04:32 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-05-30 18:04:32 +0000 |
commit | fa4cd53f7d2a4d6981bc4e09d5233f0df2c7f1cd (patch) | |
tree | fbf033c82d112b48b3a47155cf5223e737eb3a88 /gdb/continuations.h | |
parent | c2949be03bf333bd3de59dc3260762d3201f6b79 (diff) | |
download | gdb-fa4cd53f7d2a4d6981bc4e09d5233f0df2c7f1cd.zip gdb-fa4cd53f7d2a4d6981bc4e09d5233f0df2c7f1cd.tar.gz gdb-fa4cd53f7d2a4d6981bc4e09d5233f0df2c7f1cd.tar.bz2 |
2011-05-30 Pedro Alves <pedro@codesourcery.com>
gdb/
* continuations.h (continuation_ftype): Add `err' parameter.
Document parameters.
(do_all_continuations, do_all_continuations_thread)
(do_all_intermediate_continuations)
(do_all_intermediate_continuations_thread)
(do_all_inferior_continuations): Add `err' parameter.
* continuations.c (do_my_continuations_1, do_my_continuations)
(do_all_inferior_continuations, do_all_continuations_ptid)
(do_all_continuations_thread_callback)
(do_all_continuations_thread, do_all_continuations)
(do_all_intermediate_continuations_thread_callback)
(do_all_intermediate_continuations_thread)
(do_all_intermediate_continuations): Add `err' parameter, and pass
it down all the way to the continuations proper.
* inf-loop.c (inferior_event_handler): If fetching an inferior
event throws an error, don't pop the target, and still call the
continuations, but with `err' set. Adjust all other continuation
calls.
* breakpoint.c (until_break_command_continuation): Add `err'
parameter.
* infcmd.c (step_1_continuation): Add `err' parameter. Don't
issue another step if `err' is set.
(struct until_next_continuation_args): New.
(until_next_continuation): Add `err' parameter. Adjust.
(until_next_command): Adjust.
(struct finish_command_continuation_args): Add `thread' field.
(finish_command_continuation): Add `err' parameter. Handle it.
(finish_forward): Adjust.
(attach_command_continuation): Add `err' parameter. Handle it.
* infrun.c (infrun_thread_stop_requested_callback): Adjust to
cancel the continuations.
* interps.c (interp_set): Adjust to cancel the continuations.
* thread.c (clear_thread_inferior_resources): Adjust to cancel the
continuations rather than discarding.
(free_thread): Don't clear thread inferior resources here.
(delete_thread_1): Do it here instead. And do it before removing
the thread from the threads list. Tag the thread as exited before
clearing thread inferior resources.
Diffstat (limited to 'gdb/continuations.h')
-rw-r--r-- | gdb/continuations.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/gdb/continuations.h b/gdb/continuations.h index aaba362..bf3b516 100644 --- a/gdb/continuations.h +++ b/gdb/continuations.h @@ -30,8 +30,16 @@ struct inferior; used by the finish and until commands, and in the remote protocol when opening an extended-remote connection. */ -/* Prototype of the continuation callback functions. */ -typedef void (continuation_ftype) (void *); +/* Prototype of the continuation callback functions. ARG is the + continuation argument registered in the corresponding + add_*_continuation call. ERR is true when the command should be + cancelled instead of finished normally. In that case, the + continuation should clean up whatever state had been set up for the + command in question (e.g., remove momentary breakpoints). This + happens e.g., when an error was thrown while handling a target + event, or when the inferior thread the command was being executed + on exits. */ +typedef void (continuation_ftype) (void *arg, int err); /* Prototype of the function responsible for releasing the argument passed to the continuation callback functions, either when the @@ -43,16 +51,16 @@ typedef void (continuation_free_arg_ftype) (void *); extern void add_continuation (struct thread_info *, continuation_ftype *, void *, continuation_free_arg_ftype *); -extern void do_all_continuations (void); -extern void do_all_continuations_thread (struct thread_info *); +extern void do_all_continuations (int err); +extern void do_all_continuations_thread (struct thread_info *, int err); extern void discard_all_continuations (void); extern void discard_all_continuations_thread (struct thread_info *); extern void add_intermediate_continuation (struct thread_info *, continuation_ftype *, void *, continuation_free_arg_ftype *); -extern void do_all_intermediate_continuations (void); -extern void do_all_intermediate_continuations_thread (struct thread_info *); +extern void do_all_intermediate_continuations (int err); +extern void do_all_intermediate_continuations_thread (struct thread_info *, int err); extern void discard_all_intermediate_continuations (void); extern void discard_all_intermediate_continuations_thread (struct thread_info *); @@ -61,7 +69,7 @@ extern void discard_all_intermediate_continuations_thread (struct thread_info *) extern void add_inferior_continuation (continuation_ftype *, void *, continuation_free_arg_ftype *); -extern void do_all_inferior_continuations (void); +extern void do_all_inferior_continuations (int err); extern void discard_all_inferior_continuations (struct inferior *inf); #endif |