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/thread.c | |
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/thread.c')
-rw-r--r-- | gdb/thread.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/gdb/thread.c b/gdb/thread.c index 3090b69..5a78ad1 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -125,8 +125,8 @@ clear_thread_inferior_resources (struct thread_info *tp) bpstat_clear (&tp->control.stop_bpstat); - discard_all_intermediate_continuations_thread (tp); - discard_all_continuations_thread (tp); + do_all_intermediate_continuations_thread (tp, 1); + do_all_continuations_thread (tp, 1); delete_longjmp_breakpoint (tp->num); } @@ -134,8 +134,6 @@ clear_thread_inferior_resources (struct thread_info *tp) static void free_thread (struct thread_info *tp) { - clear_thread_inferior_resources (tp); - if (tp->private) { if (tp->private_dtor) @@ -297,15 +295,19 @@ delete_thread_1 (ptid_t ptid, int silent) return; } + /* Notify thread exit, but only if we haven't already. */ + if (tp->state_ != THREAD_EXITED) + observer_notify_thread_exit (tp, silent); + + /* Tag it as exited. */ + tp->state_ = THREAD_EXITED; + clear_thread_inferior_resources (tp); + if (tpprev) tpprev->next = tp->next; else thread_list = tp->next; - /* Notify thread exit, but only if we haven't already. */ - if (tp->state_ != THREAD_EXITED) - observer_notify_thread_exit (tp, silent); - free_thread (tp); } |