* linux-nat.c (linux_nat_attach): Add the pid we attached to, to
authorPedro Alves <palves@redhat.com>
Tue, 25 Mar 2008 12:26:21 +0000 (12:26 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 25 Mar 2008 12:26:21 +0000 (12:26 +0000)
gdb's thread list.
(linux_nat_wait): Add main lwp to gdb's thread list.
* linux-thread-db.c (find_new_threads_callback): Also attach to
already listed threads which thread_db didn't know about yet.

gdb/ChangeLog
gdb/linux-nat.c
gdb/linux-thread-db.c

index 04792df..fc80108 100644 (file)
@@ -1,5 +1,13 @@
 2008-03-25  Pedro Alves  <pedro@codesourcery.com>
 
+       * linux-nat.c (linux_nat_attach): Add the pid we attached to, to
+       gdb's thread list.
+       (linux_nat_wait): Add main lwp to gdb's thread list.
+       * linux-thread-db.c (find_new_threads_callback): Also attach to
+       already listed threads which thread_db didn't know about yet.
+
+2008-03-25  Pedro Alves  <pedro@codesourcery.com>
+
        * linux-nat.c (drain_queued_events): Fix comment typo.
        (linux_nat_attach): In async mode, don't rely on storing a pending
        status.  Instead place the wait status on the pipe.
index e2ef962..9511815 100644 (file)
@@ -1173,6 +1173,10 @@ linux_nat_attach (char *args, int from_tty)
   lp = add_lwp (inferior_ptid);
   lp->cloned = cloned;
 
+  /* If this process is not using thread_db, then we still don't
+     detect any other threads, but add at least this one.  */
+  add_thread_silent (lp->ptid);
+
   lp->stopped = 1;
   lp->resumed = 1;
 
@@ -2387,6 +2391,8 @@ linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
                                 GET_PID (inferior_ptid));
       lp = add_lwp (inferior_ptid);
       lp->resumed = 1;
+      /* Add the main thread to GDB's thread list.  */
+      add_thread_silent (lp->ptid);
     }
 
   sigemptyset (&flush_mask);
index 534c9b9..8ac9818 100644 (file)
@@ -918,6 +918,7 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
   td_thrinfo_t ti;
   td_err_e err;
   ptid_t ptid;
+  struct thread_info *tp;
 
   err = td_thr_get_info_p (th_p, &ti);
   if (err != TD_OK)
@@ -945,7 +946,8 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
       return 0;
     }
 
-  if (!in_thread_list (ptid))
+  tp = find_thread_pid (ptid);
+  if (tp == NULL || tp->private == NULL)
     attach_thread (ptid, th_p, &ti);
 
   return 0;