* remote.c (record_currthread): Add inferior before child threads.
authorPedro Alves <palves@redhat.com>
Fri, 17 Oct 2008 01:08:08 +0000 (01:08 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 17 Oct 2008 01:08:08 +0000 (01:08 +0000)
(remote_threads_info): Check for exited threads.  Mention
notification order.

gdb/ChangeLog
gdb/remote.c

index 9daf556..56c6096 100644 (file)
@@ -1,3 +1,9 @@
+2008-10-17  Pedro Alves  <pedro@codesourcery.com>
+
+       * remote.c (record_currthread): Add inferior before child threads.
+       (remote_threads_info): Check for exited threads.  Mention
+       notification order.
+
 2008-10-16  Joel Brobecker  <brobecker@adacore.com>
 
        * breakpoint.h (enum bptype): New enum bp_catchpoint.
index f9249f6..727d084 100644 (file)
@@ -1096,6 +1096,13 @@ record_currthread (ptid_t currthread)
 {
   general_thread = currthread;
 
+  /* When connecting to a target remote, or to a target
+     extended-remote which already was debugging an inferior, we may
+     not know about it yet.  Add it before adding its child thread, so
+     notifications are emitted in a sensible order.  */
+  if (!in_inferior_list (ptid_get_pid (currthread)))
+    add_inferior (ptid_get_pid (currthread));
+
   /* If this is a new thread, add it to GDB's thread list.
      If we leave it up to WFI to do this, bad things will happen.  */
 
@@ -1134,12 +1141,6 @@ record_currthread (ptid_t currthread)
       /* This is really a new thread.  Add it.  */
       add_thread (currthread);
     }
-
-  if (!in_inferior_list (ptid_get_pid (currthread)))
-    /* When connecting to a target remote, or to a target
-       extended-remote which already was debugging an inferior, we may
-       not know about it yet --- add it.  */
-    add_inferior (ptid_get_pid (currthread));
 }
 
 static char *last_pass_packet;
@@ -2098,13 +2099,16 @@ remote_threads_info (void)
                {
                  new_thread = read_ptid (bufp, &bufp);
                  if (!ptid_equal (new_thread, null_ptid)
-                     && !in_thread_list (new_thread))
+                     && (!in_thread_list (new_thread)
+                         || is_exited (new_thread)))
                    {
+                     /* When connected to a multi-process aware stub,
+                        "info threads" may show up threads of
+                        inferiors we didn't know about yet.  Add them
+                        now, and before adding any of its child
+                        threads, so notifications are emitted in a
+                        sensible order.  */
                      if (!in_inferior_list (ptid_get_pid (new_thread)))
-                       /* When connected to a multi-process aware
-                          stub, "info threads" may show up threads of
-                          inferiors we didn't know about yet.  Add
-                          them.  */
                        add_inferior (ptid_get_pid (new_thread));
 
                      add_thread (new_thread);