mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
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.
This commit is contained in:
@@ -98,13 +98,23 @@ inferior_event_handler (enum inferior_event_type event_type,
|
||||
touch the inferior memory, e.g. to remove breakpoints, so run
|
||||
them before running breakpoint commands, which may resume the
|
||||
target. */
|
||||
do_all_intermediate_continuations ();
|
||||
if (non_stop
|
||||
&& target_has_execution
|
||||
&& !ptid_equal (inferior_ptid, null_ptid))
|
||||
do_all_intermediate_continuations_thread (inferior_thread ());
|
||||
else
|
||||
do_all_intermediate_continuations ();
|
||||
|
||||
/* Always finish the previous command before running any
|
||||
breakpoint commands. Any stop cancels the previous command.
|
||||
E.g. a "finish" or "step-n" command interrupted by an
|
||||
unrelated breakpoint is canceled. */
|
||||
do_all_continuations ();
|
||||
if (non_stop
|
||||
&& target_has_execution
|
||||
&& !ptid_equal (inferior_ptid, null_ptid))
|
||||
do_all_continuations_thread (inferior_thread ());
|
||||
else
|
||||
do_all_continuations ();
|
||||
|
||||
if (current_language != expected_language
|
||||
&& language_mode == language_mode_auto)
|
||||
@@ -125,7 +135,11 @@ inferior_event_handler (enum inferior_event_type event_type,
|
||||
case INF_EXEC_CONTINUE:
|
||||
/* Is there anything left to do for the command issued to
|
||||
complete? */
|
||||
do_all_intermediate_continuations ();
|
||||
|
||||
if (non_stop)
|
||||
do_all_intermediate_continuations_thread (inferior_thread ());
|
||||
else
|
||||
do_all_intermediate_continuations ();
|
||||
break;
|
||||
|
||||
case INF_QUIT_REQ:
|
||||
|
||||
Reference in New Issue
Block a user