* bsd-uthread.c (bsd_uthread_wait): Decorate the main thread with
authorPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:26:36 +0000 (21:26 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:26:36 +0000 (21:26 +0000)
thread_change_ptid.  Check for exited threads.
(bsd_uthread_find_new_threads): Check for exited threads.

gdb/ChangeLog
gdb/bsd-uthread.c

index 22bd2b284b23204a7fe10ea3e34284d2d2a6ac12..f5f8452b94f68e96a6a9daed647ef6f0d22fb530 100644 (file)
@@ -1,3 +1,9 @@
+2008-09-08  Pedro Alves  <pedro@codesourcery.com>
+
+       * bsd-uthread.c (bsd_uthread_wait): Decorate the main thread with
+       thread_change_ptid.  Check for exited threads.
+       (bsd_uthread_find_new_threads): Check for exited threads.
+
 2008-09-08  Pedro Alves  <pedro@codesourcery.com>
 
        * inf-ptrace.c: Include "gdbthread.h".
index df038e6771e32d5686d43d65095547fd54e3c5f5..b6a18f0144fd6ffe298fa87fb80cfd04861a0ded 100644 (file)
@@ -367,14 +367,16 @@ bsd_uthread_wait (ptid_t ptid, struct target_waitstatus *status)
        }
     }
 
-  /* HACK: Twiddle INFERIOR_PTID such that the initial thread of a
-     process isn't recognized as a new thread.  */
-  if (ptid_get_tid (ptid) != 0 && !in_thread_list (ptid)
-      && ptid_get_tid (inferior_ptid) == 0)
-    {
-      add_thread_silent (ptid);
-      inferior_ptid = ptid;
-    }
+  /* If INFERIOR_PTID doesn't have a tid member yet, and we now have a
+     ptid with tid set, then ptid is still the initial thread of
+     the process.  Notify GDB core about it.  */
+  if (ptid_get_tid (inferior_ptid) == 0
+      && ptid_get_tid (ptid) != 0 && !in_thread_list (ptid))
+    thread_change_ptid (inferior_ptid, ptid);
+
+  /* Don't let the core see a ptid without a corresponding thread.  */
+  if (!in_thread_list (ptid) || is_exited (ptid))
+    add_thread (ptid);
 
   return ptid;
 }
@@ -419,7 +421,7 @@ bsd_uthread_find_new_threads (void)
     {
       ptid_t ptid = ptid_build (pid, 0, addr);
 
-      if (!in_thread_list (ptid))
+      if (!in_thread_list (ptid) || is_exited (ptid))
        add_thread (ptid);
 
       addr = read_memory_typed_address (addr + offset,