2001-05-22 Michael Snyder <msnyder@redhat.com>

* thread-db.c: Allow for defunct zombie threads.
	(attach_thread): Do not attempt to attach zombie thread.
	(thread_db_thread_alive): Return false for defunct zombie thread.
	(find_new_threads_callback): Don't add defunct zombie thread to list.
This commit is contained in:
Michael Snyder 2001-05-23 00:06:15 +00:00
parent 7ed49443c2
commit 5fd913cc66
2 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2001-05-22 Michael Snyder <msnyder@redhat.com>
* thread-db.c: Allow for defunct zombie threads.
(attach_thread): Do not attempt to attach zombie thread.
(thread_db_thread_alive): Return false for defunct zombie thread.
(find_new_threads_callback): Don't add defunct zombie thread to list.
2001-05-22 Jim Blandy <jimb@redhat.com> 2001-05-22 Jim Blandy <jimb@redhat.com>
Add support for the GNU V3 C++ ABI. Add support for the GNU V3 C++ ABI.

View File

@ -573,6 +573,9 @@ attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
tp->private = xmalloc (sizeof (struct private_thread_info)); tp->private = xmalloc (sizeof (struct private_thread_info));
tp->private->lwpid = ti_p->ti_lid; tp->private->lwpid = ti_p->ti_lid;
if (ti_p->ti_state == TD_THR_UNKNOWN)
return;/* A zombie thread that's been joined -- do not attach. */
/* Under Linux, we have to attach to each and every thread. */ /* Under Linux, we have to attach to each and every thread. */
#ifdef ATTACH_LWP #ifdef ATTACH_LWP
ATTACH_LWP (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid)), 0); ATTACH_LWP (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid)), 0);
@ -894,11 +897,12 @@ thread_db_mourn_inferior (void)
static int static int
thread_db_thread_alive (ptid_t ptid) thread_db_thread_alive (ptid_t ptid)
{ {
td_thrhandle_t th;
td_thrinfo_t ti;
td_err_e err;
if (is_thread (ptid)) if (is_thread (ptid))
{ {
td_thrhandle_t th;
td_err_e err;
err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (ptid), &th); err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (ptid), &th);
if (err != TD_OK) if (err != TD_OK)
return 0; return 0;
@ -907,6 +911,13 @@ thread_db_thread_alive (ptid_t ptid)
if (err != TD_OK) if (err != TD_OK)
return 0; return 0;
err = td_thr_get_info_p (&th, &ti);
if (err != TD_OK)
return 0;
if (ti.ti_state == TD_THR_UNKNOWN)
return 0; /* A zombie thread that's been joined. */
return 1; return 1;
} }
@ -927,6 +938,9 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
if (err != TD_OK) if (err != TD_OK)
error ("Cannot get thread info: %s", thread_db_err_str (err)); error ("Cannot get thread info: %s", thread_db_err_str (err));
if (ti.ti_state == TD_THR_UNKNOWN)
return 0; /* A zombie that's been reaped -- ignore. */
ptid = BUILD_THREAD (ti.ti_tid, GET_PID (inferior_ptid)); ptid = BUILD_THREAD (ti.ti_tid, GET_PID (inferior_ptid));
if (! in_thread_list (ptid)) if (! in_thread_list (ptid))