This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: fail to attach to process on Solaris


On Wednesday 21 September 2011 18:15:48, Burkhardt, Glenn wrote:

> > It's libthread_db.so that maps a thread to a LWP id, so we 
> > may be missing some state checks and getting back a stale id.
> > Try the "maint info sol-threads" command (I never noticed 
> > this command before), and let's see what state does 
> > libthread_db.so think the thread is in.  I see that 
> > linux-thread-db.c (the glibc/linux fork of this code) has 
> > extra checks for ignoring threads in some states that the 
> > Solaris code doesn't have.

> So, this time the first thread to fail is #68, and the maint command
> shows the thread as having a 'zombie' LWP:
> 
>  - Sleep func: 0x6ccfa4
> user   thread #67, lwp 67, (active)    startfunc: bootStrap
> user   thread #69, lwp 69, (asleep)    startfunc: bootStrap
>  - Sleep func: 0x6ccfa4
> user   thread #2, lwp 2, (zombie)    startfunc: bootStrap
> user   thread #61, lwp 61, (zombie)    startfunc: bootStrap
> user   thread #64, lwp 64, (zombie)    startfunc: bootStrap
> user   thread #65, lwp 65, (zombie)    startfunc: bootStrap
> user   thread #70, lwp 70, (zombie)    startfunc: bootStrap
> user   thread #66, lwp 66, (zombie)    startfunc: bootStrap
> user   thread #68, lwp 68, (zombie)    startfunc: bootStrap
> (gdb) c
> Continuing.
> procfs: couldn't find pid 16946 (kernel thread 68) in procinfo list.
> (gdb) det
> Detaching from program:
> /home/glenn.burkhardt/targets/sol/ata0a/rms/rms.sparc, process 16946
> 
> 
> A complete log of the session is attached.

It got trimmed where it began to be interesting.  :-(

Okay, the linux code ignores zombie threads, like in the patch
below.  Does that help?  There's a couple more places where it
ignores zombie threads, that we may need to bring over as well.
Look for TD_THR_ZOMBIE in linux-thread-db.c.

-- 
Pedro Alves

---
 gdb/sol-thread.c |    3 +++
 1 file changed, 3 insertions(+)

Index: src/gdb/sol-thread.c
===================================================================
--- src.orig/gdb/sol-thread.c	2011-03-01 16:00:06.000000000 +0000
+++ src/gdb/sol-thread.c	2011-09-21 18:34:30.029928904 +0100
@@ -1177,6 +1177,9 @@ sol_find_new_threads_callback (const td_
   if (retval != TD_OK)
     return -1;
 
+  if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
+    return 0;			/* A zombie -- ignore.  */
+
   ptid = BUILD_THREAD (ti.ti_tid, PIDGET (inferior_ptid));
   if (!in_thread_list (ptid) || is_exited (ptid))
     add_thread (ptid);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]