* infrun.c (handle_inferior_event): Update comment around trying

to revert back to a stepping thread that has exited.
This commit is contained in:
Pedro Alves 2009-06-10 17:26:36 +00:00
parent d0c6ba3d4d
commit 66852e9c4d
2 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2009-06-10 Pedro Alves <pedro@codesourcery.com>
* infrun.c (handle_inferior_event): Update comment around trying
to revert back to a stepping thread that has exited.
2009-06-10 Cary Coutant <ccoutant@google.com>
* dwarf2read.c (dwarf_decode_lines): Recognize and ignore

View File

@ -3496,9 +3496,25 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (!gdbarch_get_longjmp_target)\n");
return;
}
/* If the stepping thread exited, then don't try reverting
back to it, just keep going. We need to query the target
in case it doesn't support thread exit events. */
/* If the stepping thread exited, then don't try to switch
back and resume it, which could fail in several different
ways depending on the target. Instead, just keep going.
We can find a stepping dead thread in the thread list in
two cases:
- The target supports thread exit events, and when the
target tries to delete the thread from the thread list,
inferior_ptid pointed at the exiting thread. In such
case, calling delete_thread does not really remove the
thread from the list; instead, the thread is left listed,
with 'exited' state.
- The target's debug interface does not support thread
exit events, and so we have no idea whatsoever if the
previously stepping thread is still alive. For that
reason, we need to synchronously query the target
now. */
if (is_exited (tp->ptid)
|| !target_thread_alive (tp->ptid))
{