* infrun.c (handle_inferior_event): Update comment around trying
authorPedro Alves <palves@redhat.com>
Wed, 10 Jun 2009 17:26:36 +0000 (17:26 +0000)
committerPedro Alves <palves@redhat.com>
Wed, 10 Jun 2009 17:26:36 +0000 (17:26 +0000)
to revert back to a stepping thread that has exited.

gdb/ChangeLog
gdb/infrun.c

index 537fea8bdc66f402e6052e94d8562475b9c47e6d..3d97324ccde4c87a192b295ea68673209312588d 100644 (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
index 4b101519508cb68eba81e7293ec5b83d44570b17..885e3257db7c6118de802fdd5cc4b1c71157ed4f 100644 (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))
            {
This page took 0.03254 seconds and 4 git commands to generate.