Implement optional-constant.
[kopensolaris-gnu/glibc.git] / linuxthreads_db / td_ta_thr_iter.c
index 8cb8c63..e650268 100644 (file)
@@ -1,5 +1,5 @@
 /* Iterate over a process's threads.
-   Copyright (C) 1999 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
 
@@ -19,7 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include "thread_dbP.h"
-
+#include <alloca.h>
 
 static int
 handle_descr (const td_thragent_t *ta, td_thr_iter_f *callback,
@@ -30,11 +30,6 @@ handle_descr (const td_thragent_t *ta, td_thr_iter_f *callback,
   size_t sizeof_descr = ta->sizeof_descr;
   td_thrhandle_t th;
 
-#ifdef ALL_THREADS_STOPPED
-  /* First count this active thread.  */
-  --num;
-#endif
-
   if (ps_pdread (ta->ph, descr, &pds, sizeof_descr) != PS_OK)
     return TD_ERR;     /* XXX Other error value?  */
 
@@ -117,7 +112,7 @@ td_ta_thr_iter (const td_thragent_t *ta, td_thr_iter_f *callback,
     return result;
 
   /* Read all the descriptors.  */
-  if (ps_pdread (ta->ph, ta->handles, &phc[2],
+  if (ps_pdread (ta->ph, ta->handles + 2, &phc[2],
                 (sizeof (struct pthread_handle_struct)
                  * (pthread_threads_max - 2))) != PS_OK)
     return TD_ERR;     /* XXX Other error value?  */
@@ -129,9 +124,14 @@ td_ta_thr_iter (const td_thragent_t *ta, td_thr_iter_f *callback,
 #endif
 
   /* Now get all descriptors, one after the other.  */
-  for (cnt = 0; cnt < pthread_threads_max && num > 0; ++cnt)
+  for (cnt = 2; cnt < pthread_threads_max && num > 0; ++cnt)
     if (phc[cnt].h_descr != NULL)
       {
+#ifdef ALL_THREADS_STOPPED
+       /* First count this active thread.  */
+       --num;
+#endif
+
        result = handle_descr (ta, callback, cbdata_p, state, ti_pri, cnt,
                               phc[cnt].h_descr);
        if (result != TD_OK)