mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-29 08:11:08 +00:00
Update.
1999-10-13 Ulrich Drepper <drepper@cygnus.com> * td_ta_thr_iter.c: Use size of descriptor from *TA. Don't return manager thread before it's actually running. Actually use state parameter to distingusih at least a few states. * td_thr_get_info.c: Handle manager thread special. Fill in ti_lid, ti_state fields, and ti_startfunc fields.
This commit is contained in:
parent
252470b60f
commit
00e50680b1
@ -1,3 +1,12 @@
|
|||||||
|
1999-10-13 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* td_ta_thr_iter.c: Use size of descriptor from *TA.
|
||||||
|
Don't return manager thread before it's actually running.
|
||||||
|
Actually use state parameter to distingusih at least a few states.
|
||||||
|
|
||||||
|
* td_thr_get_info.c: Handle manager thread special. Fill in ti_lid,
|
||||||
|
ti_state fields, and ti_startfunc fields.
|
||||||
|
|
||||||
1999-10-12 Ulrich Drepper <drepper@cygnus.com>
|
1999-10-12 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/i386/sys/ucontext.h: Don't define
|
* sysdeps/unix/sysv/linux/i386/sys/ucontext.h: Don't define
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
1999-10-13 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* td_ta_thr_iter.c: Use size of descriptor from *TA.
|
||||||
|
Don't return manager thread before it's actually running.
|
||||||
|
Actually use state parameter to distingusih at least a few states.
|
||||||
|
|
||||||
|
* td_thr_get_info.c: Handle manager thread special. Fill in ti_lid,
|
||||||
|
ti_state fields, and ti_startfunc fields.
|
||||||
|
|
||||||
1999-10-12 Andreas Jaeger <aj@suse.de>
|
1999-10-12 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* thread_dbP.h: Include <string.h> for strlen declaration. Remove
|
* thread_dbP.h: Include <string.h> for strlen declaration. Remove
|
||||||
|
@ -28,6 +28,7 @@ td_ta_thr_iter (const td_thragent_t *ta, td_thr_iter_f *callback,
|
|||||||
{
|
{
|
||||||
struct pthread_handle_struct *handles = ta->handles;
|
struct pthread_handle_struct *handles = ta->handles;
|
||||||
int pthread_threads_max = ta->pthread_threads_max;
|
int pthread_threads_max = ta->pthread_threads_max;
|
||||||
|
size_t sizeof_descr = ta->sizeof_descr;
|
||||||
int cnt;
|
int cnt;
|
||||||
|
|
||||||
LOG (__FUNCTION__);
|
LOG (__FUNCTION__);
|
||||||
@ -46,10 +47,16 @@ td_ta_thr_iter (const td_thragent_t *ta, td_thr_iter_f *callback,
|
|||||||
struct _pthread_descr_struct pds;
|
struct _pthread_descr_struct pds;
|
||||||
td_thrhandle_t th;
|
td_thrhandle_t th;
|
||||||
|
|
||||||
if (ps_pdread (ta->ph, phc.h_descr, &pds,
|
if (ps_pdread (ta->ph, phc.h_descr, &pds, sizeof_descr) != PS_OK)
|
||||||
sizeof (struct _pthread_descr_struct)) != PS_OK)
|
|
||||||
return TD_ERR; /* XXX Other error value? */
|
return TD_ERR; /* XXX Other error value? */
|
||||||
|
|
||||||
|
/* The manager thread must be handled special. The descriptor
|
||||||
|
exists but the thread only gets created when the first
|
||||||
|
`pthread_create' call is issued. A clear indication that
|
||||||
|
this happened is when the p_pid field is non-zero. */
|
||||||
|
if (cnt == 1 && pds.p_pid == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* Now test whether this thread matches the specified
|
/* Now test whether this thread matches the specified
|
||||||
conditions. */
|
conditions. */
|
||||||
|
|
||||||
@ -57,6 +64,13 @@ td_ta_thr_iter (const td_thragent_t *ta, td_thr_iter_f *callback,
|
|||||||
if (pds.p_priority < ti_pri)
|
if (pds.p_priority < ti_pri)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* Test the state.
|
||||||
|
XXX This is incomplete. */
|
||||||
|
if (state != TD_THR_ANY_STATE
|
||||||
|
&& (state != TD_THR_ZOMBIE || pds.p_exited == 0)
|
||||||
|
&& (state != TD_THR_RUN || pds.p_exited != 0))
|
||||||
|
continue;
|
||||||
|
|
||||||
/* Yep, it matches. Call the callback function. */
|
/* Yep, it matches. Call the callback function. */
|
||||||
th.th_ta_p = (td_thragent_t *) ta;
|
th.th_ta_p = (td_thragent_t *) ta;
|
||||||
th.th_unique = phc.h_descr;
|
th.th_unique = phc.h_descr;
|
||||||
|
@ -39,21 +39,33 @@ td_thr_get_info (const td_thrhandle_t *th, td_thrinfo_t *infop)
|
|||||||
results for the fields we do not fill in. */
|
results for the fields we do not fill in. */
|
||||||
memset (infop, '\0', sizeof (td_thrinfo_t));
|
memset (infop, '\0', sizeof (td_thrinfo_t));
|
||||||
|
|
||||||
|
/* We have to handle the manager thread special since the thread
|
||||||
|
descriptor in older versions is not fully initialized. */
|
||||||
|
if (pds.p_nr == 1)
|
||||||
|
{
|
||||||
|
infop->ti_ta_p = th->th_ta_p;
|
||||||
|
infop->ti_tid = th->th_ta_p->pthread_threads_max * 2 + 1;
|
||||||
|
infop->ti_lid = pds.p_pid;
|
||||||
|
infop->ti_type = TD_THR_SYSTEM;
|
||||||
|
infop->ti_state = TD_THR_RUN;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
infop->ti_ta_p = th->th_ta_p;
|
infop->ti_ta_p = th->th_ta_p;
|
||||||
infop->ti_tid = pds.p_tid;
|
infop->ti_tid = pds.p_tid;
|
||||||
|
infop->ti_lid = pds.p_pid;
|
||||||
infop->ti_tls = (char *) pds.p_specific;
|
infop->ti_tls = (char *) pds.p_specific;
|
||||||
infop->ti_pri = pds.p_priority;
|
infop->ti_pri = pds.p_priority;
|
||||||
/* The first thread (0 being the initial one) is the manager thread
|
infop->ti_type = TD_THR_USER;
|
||||||
Mark it appropriately. */
|
|
||||||
infop->ti_type = ((pds.p_tid % th->th_ta_p->pthread_threads_max) == 1
|
|
||||||
? TD_THR_SYSTEM : TD_THR_USER);
|
|
||||||
|
|
||||||
/* We can get the following information only if the thread descriptor
|
if (pds.p_exited)
|
||||||
in the target processor is large enough, i.e., comes from a recent
|
infop->ti_state = TD_THR_ZOMBIE;
|
||||||
enough library. */
|
else
|
||||||
if (offsetof (struct _pthread_descr_struct, p_startfct)
|
/* XXX For now there is no way to get more information. */
|
||||||
< th->th_ta_p->sizeof_descr)
|
infop->ti_state = TD_THR_RUN;
|
||||||
infop->ti_startfunc = pds.p_startfct;
|
|
||||||
|
infop->ti_startfunc = pds.p_start_args.start_routine;
|
||||||
|
}
|
||||||
|
|
||||||
return TD_OK;
|
return TD_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user