summaryrefslogtreecommitdiff
path: root/libpthread/linuxthreads_db/td_ta_map_id2thr.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-02-27 18:13:05 +0000
committerEric Andersen <andersen@codepoet.org>2003-02-27 18:13:05 +0000
commit187dd78d7bd1c03fcf16e54a30314512d38e1a4a (patch)
tree9780638e5286b40da74a128c9f540a9ea720862f /libpthread/linuxthreads_db/td_ta_map_id2thr.c
parentd4d6e2c50565da18253cd0d6f3332484142b6587 (diff)
Major update for pthreads, based in large part on improvements
from glibc 2.3. This should make threads much more efficient. -Erik
Diffstat (limited to 'libpthread/linuxthreads_db/td_ta_map_id2thr.c')
-rw-r--r--libpthread/linuxthreads_db/td_ta_map_id2thr.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/libpthread/linuxthreads_db/td_ta_map_id2thr.c b/libpthread/linuxthreads_db/td_ta_map_id2thr.c
index 5171a5bf1..ddb6492e2 100644
--- a/libpthread/linuxthreads_db/td_ta_map_id2thr.c
+++ b/libpthread/linuxthreads_db/td_ta_map_id2thr.c
@@ -1,5 +1,5 @@
/* Map thread ID to thread handle.
- Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
@@ -19,6 +19,7 @@
02111-1307 USA. */
#include "thread_dbP.h"
+#include "../linuxthreads/internals.h"
td_err_e
@@ -28,7 +29,7 @@ td_ta_map_id2thr (const td_thragent_t *ta, pthread_t pt, td_thrhandle_t *th)
struct _pthread_descr_struct pds;
int pthread_threads_max;
- LOG (__FUNCTION__);
+ LOG ("td_ta_map_id2thr");
/* Test whether the TA parameter is ok. */
if (! ta_ok (ta))
@@ -44,7 +45,19 @@ td_ta_map_id2thr (const td_thragent_t *ta, pthread_t pt, td_thrhandle_t *th)
/* Test whether this entry is in use. */
if (phc.h_descr == NULL)
- return TD_BADTH;
+ {
+ if (pt % pthread_threads_max == 0)
+ {
+ /* The initial thread always exists but the thread library
+ might not yet be initialized. */
+ th->th_ta_p = (td_thragent_t *) ta;
+ th->th_unique = NULL;
+
+ return TD_OK;
+ }
+
+ return TD_BADTH;
+ }
/* Next test: get the descriptor to see whether this is not an old
thread handle. */