From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Snyder To: gdb-patches@sources.redhat.com Subject: [PATCH]: linux and zombie threads Date: Tue, 22 May 2001 17:07:00 -0000 Message-id: <3B0AFF44.43872CA1@cygnus.com> X-SW-Source: 2001-05/msg00423.html Mark -- these changes prepare the way for a libthread_db change that will allow gdb to recognize zombie threads. 2001-05-22 Michael Snyder * 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. Index: thread-db.c =================================================================== RCS file: /cvs/src/src/gdb/thread-db.c,v retrieving revision 1.13 diff -c -3 -p -r1.13 thread-db.c *** thread-db.c 2001/05/15 00:03:36 1.13 --- thread-db.c 2001/05/23 00:05:41 *************** attach_thread (ptid_t ptid, const td_thr *** 573,578 **** --- 573,581 ---- tp->private = xmalloc (sizeof (struct private_thread_info)); 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. */ #ifdef ATTACH_LWP ATTACH_LWP (BUILD_LWP (ti_p->ti_lid, GET_PID (ptid)), 0); *************** thread_db_mourn_inferior (void) *** 894,904 **** static int thread_db_thread_alive (ptid_t 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); if (err != TD_OK) return 0; --- 897,908 ---- static int thread_db_thread_alive (ptid_t ptid) { + td_thrhandle_t th; + td_thrinfo_t ti; + td_err_e err; + if (is_thread (ptid)) { err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (ptid), &th); if (err != TD_OK) return 0; *************** thread_db_thread_alive (ptid_t ptid) *** 907,912 **** --- 911,923 ---- if (err != TD_OK) 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; } *************** find_new_threads_callback (const td_thrh *** 926,931 **** --- 937,945 ---- err = td_thr_get_info_p (th_p, &ti); if (err != TD_OK) 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)); >From kevinb@cygnus.com Tue May 22 17:53:00 2001 From: Kevin Buettner To: Jim Blandy Cc: gdb-patches@sources.redhat.com Subject: Re: [PATCH RFA #2] breakpoint.c: More check_duplicates() changes Date: Tue, 22 May 2001 17:53:00 -0000 Message-id: <1010523005321.ZM29277@ocotillo.lan> References: <1010512223535.ZM30908@ocotillo.lan> <1010522235055.ZM29150@ocotillo.lan> X-SW-Source: 2001-05/msg00424.html Content-length: 216 On May 22, 4:50pm, Kevin Buettner wrote: > * breakpoint.c (breakpoint_address_is_meaningful): New function. > (check_duplicates): Don't compare non-meaningful addresses. I've just committed this change. Kevin