aboutsummaryrefslogtreecommitdiff
path: root/gdb/inf-loop.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2011-05-30 18:04:32 +0000
committerPedro Alves <palves@redhat.com>2011-05-30 18:04:32 +0000
commitfa4cd53f7d2a4d6981bc4e09d5233f0df2c7f1cd (patch)
treefbf033c82d112b48b3a47155cf5223e737eb3a88 /gdb/inf-loop.c
parentc2949be03bf333bd3de59dc3260762d3201f6b79 (diff)
downloadgdb-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/inf-loop.c')
-rw-r--r--gdb/inf-loop.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c
index 1645c38..0ab372c 100644
--- a/gdb/inf-loop.c
+++ b/gdb/inf-loop.c
@@ -63,13 +63,12 @@ inferior_event_handler (enum inferior_event_type event_type,
/* Use catch errors for now, until the inner layers of
fetch_inferior_event (i.e. readchar) can return meaningful
error status. If an error occurs while getting an event from
- the target, just get rid of the target. */
+ the target, just cancel the current command. */
if (!catch_errors (fetch_inferior_event_wrapper,
client_data, "", RETURN_MASK_ALL))
{
- pop_all_targets_above (file_stratum, 0);
- discard_all_intermediate_continuations ();
- discard_all_continuations ();
+ do_all_intermediate_continuations (1);
+ do_all_continuations (1);
async_enable_stdin ();
display_gdb_prompt (0);
}
@@ -95,7 +94,7 @@ inferior_event_handler (enum inferior_event_type event_type,
/* Do all continuations associated with the whole inferior (not
a particular thread). */
if (!ptid_equal (inferior_ptid, null_ptid))
- do_all_inferior_continuations ();
+ do_all_inferior_continuations (0);
/* If we were doing a multi-step (eg: step n, next n), but it
got interrupted by a breakpoint, still do the pending
@@ -107,9 +106,9 @@ inferior_event_handler (enum inferior_event_type event_type,
if (non_stop
&& target_has_execution
&& !ptid_equal (inferior_ptid, null_ptid))
- do_all_intermediate_continuations_thread (inferior_thread ());
+ do_all_intermediate_continuations_thread (inferior_thread (), 0);
else
- do_all_intermediate_continuations ();
+ do_all_intermediate_continuations (0);
/* Always finish the previous command before running any
breakpoint commands. Any stop cancels the previous command.
@@ -118,9 +117,9 @@ inferior_event_handler (enum inferior_event_type event_type,
if (non_stop
&& target_has_execution
&& !ptid_equal (inferior_ptid, null_ptid))
- do_all_continuations_thread (inferior_thread ());
+ do_all_continuations_thread (inferior_thread (), 0);
else
- do_all_continuations ();
+ do_all_continuations (0);
if (info_verbose
&& current_language != expected_language
@@ -147,9 +146,9 @@ inferior_event_handler (enum inferior_event_type event_type,
complete? */
if (non_stop)
- do_all_intermediate_continuations_thread (inferior_thread ());
+ do_all_intermediate_continuations_thread (inferior_thread (), 0);
else
- do_all_intermediate_continuations ();
+ do_all_intermediate_continuations (0);
break;
case INF_QUIT_REQ: