aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/thread-db.c10
2 files changed, 14 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 342f3fd..bb17a7c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2001-06-29 Ken Whaley <ken@believe.com>
+
+ * thread-db.c (attach_thread): Check for TD_THR_ZOMBIE in addition
+ to TD_THR_UNKNOWN when looking for defunct zombie threads.
+ (thread_db_thread_alive): Ditto.
+ (find_new_threads_callback): Ditto.
+
2001-07-02 Daniel Jacobowitz <drow@mvista.com>
* MAINTAINERS: Add myself to the write-after-approval list.
diff --git a/gdb/thread-db.c b/gdb/thread-db.c
index d989c49..364dcc7 100644
--- a/gdb/thread-db.c
+++ b/gdb/thread-db.c
@@ -573,7 +573,8 @@ attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
tp->private = xmalloc (sizeof (struct private_thread_info));
tp->private->lwpid = ti_p->ti_lid;
- if (ti_p->ti_state == TD_THR_UNKNOWN)
+ if (ti_p->ti_state == TD_THR_UNKNOWN ||
+ ti_p->ti_state == TD_THR_ZOMBIE)
return;/* A zombie thread that's been joined -- do not attach. */
/* Under Linux, we have to attach to each and every thread. */
@@ -915,7 +916,8 @@ thread_db_thread_alive (ptid_t ptid)
if (err != TD_OK)
return 0;
- if (ti.ti_state == TD_THR_UNKNOWN)
+ if (ti.ti_state == TD_THR_UNKNOWN ||
+ ti.ti_state == TD_THR_ZOMBIE)
return 0; /* A zombie thread that's been joined. */
return 1;
@@ -938,7 +940,9 @@ find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
if (err != TD_OK)
error ("Cannot get thread info: %s", thread_db_err_str (err));
- if (ti.ti_state == TD_THR_UNKNOWN)
+ if (ti.ti_state == TD_THR_UNKNOWN ||
+ ti.ti_state == TD_THR_ZOMBIE)
+
return 0; /* A zombie that's been reaped -- ignore. */
ptid = BUILD_THREAD (ti.ti_tid, GET_PID (inferior_ptid));