diff options
author | Pedro Alves <pedro@codesourcery.com> | 2011-05-30 18:04:31 +0000 |
---|---|---|
committer | Pedro Alves <pedro@codesourcery.com> | 2011-05-30 18:04:31 +0000 |
commit | 9d5f08d6f93ad091e5b0733c299f7eb1c7a94abd (patch) | |
tree | 5455d46ac80fa77aa5efd9d54c0c8d77f58be498 /gdb/thread.c | |
parent | 91418c4d96655bf2d620040bab9d4b04eca31683 (diff) | |
download | gdb-9d5f08d6f93ad091e5b0733c299f7eb1c7a94abd.tar.gz |
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 3090b692556..5a78ad17025 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); } |