aboutsummaryrefslogtreecommitdiff
path: root/lib/libthr
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2004-07-02 00:40:07 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2004-07-02 00:40:07 +0000
commitcd28f17da2f89e4e3f6dc3874912ac7e1947cfc0 (patch)
tree9c8400ddc4d640b6eb03f81ba5983718f183b0e0 /lib/libthr
parentc2589102b04e7bd387c80900ab10977ab56c1f1e (diff)
downloadsrc-cd28f17da2f89e4e3f6dc3874912ac7e1947cfc0.tar.gz
src-cd28f17da2f89e4e3f6dc3874912ac7e1947cfc0.zip
Change the thread ID (thr_id_t) used for 1:1 threading from being a
pointer to the corresponding struct thread to the thread ID (lwpid_t) assigned to that thread. The primary reason for this change is that libthr now internally uses the same ID as the debugger and the kernel when referencing to a kernel thread. This allows us to implement the support for debugging without additional translations and/or mappings. To preserve the ABI, the 1:1 threading syscalls, including the umtx locking API have not been changed to work on a lwpid_t. Instead the 1:1 threading syscalls operate on long and the umtx locking API has not been changed except for the contested bit. Previously this was the least significant bit. Now it's the most significant bit. Since the contested bit should not be tested by userland, this change is not expected to be visible. Just to be sure, UMTX_CONTESTED has been removed from <sys/umtx.h>. Reviewed by: mtm@ ABI preservation tested on: i386, ia64
Notes
Notes: svn path=/head/; revision=131431
Diffstat (limited to 'lib/libthr')
-rw-r--r--lib/libthr/thread/thr_cond.c8
-rw-r--r--lib/libthr/thread/thr_create.c9
-rw-r--r--lib/libthr/thread/thr_mutex.c8
-rw-r--r--lib/libthr/thread/thr_private.h3
4 files changed, 9 insertions, 19 deletions
diff --git a/lib/libthr/thread/thr_cond.c b/lib/libthr/thread/thr_cond.c
index dedd3c205fc7..b2cbb837892a 100644
--- a/lib/libthr/thread/thr_cond.c
+++ b/lib/libthr/thread/thr_cond.c
@@ -439,11 +439,11 @@ cond_queue_enq(pthread_cond_t cond, pthread_t pthread)
name = pthread->name ? pthread->name : "unknown";
if ((pthread->flags & PTHREAD_FLAGS_IN_CONDQ) != 0)
- _thread_printf(2, "Thread (%s:%u) already on condq\n",
- pthread->name, pthread->uniqueid);
+ _thread_printf(2, "Thread (%s:%ld) already on condq\n",
+ pthread->name, pthread->thr_id);
if ((pthread->flags & PTHREAD_FLAGS_IN_MUTEXQ) != 0)
- _thread_printf(2, "Thread (%s:%u) already on mutexq\n",
- pthread->name, pthread->uniqueid);
+ _thread_printf(2, "Thread (%s:%ld) already on mutexq\n",
+ pthread->name, pthread->thr_id);
PTHREAD_ASSERT_NOT_IN_SYNCQ(pthread);
/*
diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c
index 8eff86172e21..a6193327a6e4 100644
--- a/lib/libthr/thread/thr_create.c
+++ b/lib/libthr/thread/thr_create.c
@@ -43,11 +43,8 @@
#include "thr_private.h"
#include "libc_private.h"
-static u_int64_t next_uniqueid = 1;
-
#define OFF(f) offsetof(struct pthread, f)
int _thread_next_offset = OFF(tle.tqe_next);
-int _thread_uniqueid_offset = OFF(uniqueid);
int _thread_name_offset = OFF(name);
int _thread_ctx_offset = OFF(ctx);
#undef OFF
@@ -137,12 +134,6 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr,
}
new_thread->active_priority = new_thread->base_priority;
- /*
- * Initialise the unique id which GDB uses to
- * track threads.
- */
- new_thread->uniqueid = next_uniqueid++;
-
THREAD_LIST_LOCK;
/* Add the thread to the linked list of all threads: */
diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c
index 46a06258ee21..ca16cb6aaf63 100644
--- a/lib/libthr/thread/thr_mutex.c
+++ b/lib/libthr/thread/thr_mutex.c
@@ -799,11 +799,11 @@ mutex_queue_enq(pthread_mutex_t mutex, pthread_t pthread)
name = pthread->name ? pthread->name : "unknown";
if ((pthread->flags & PTHREAD_FLAGS_IN_CONDQ) != 0)
- _thread_printf(2, "Thread (%s:%u) already on condq\n",
- pthread->name, pthread->uniqueid);
+ _thread_printf(2, "Thread (%s:%ld) already on condq\n",
+ pthread->name, pthread->thr_id);
if ((pthread->flags & PTHREAD_FLAGS_IN_MUTEXQ) != 0)
- _thread_printf(2, "Thread (%s:%u) already on mutexq\n",
- pthread->name, pthread->uniqueid);
+ _thread_printf(2, "Thread (%s:%ld) already on mutexq\n",
+ pthread->name, pthread->thr_id);
PTHREAD_ASSERT_NOT_IN_SYNCQ(pthread);
/*
* For the common case of all threads having equal priority,
diff --git a/lib/libthr/thread/thr_private.h b/lib/libthr/thread/thr_private.h
index 4e78de28dce9..e6ba4aa4e656 100644
--- a/lib/libthr/thread/thr_private.h
+++ b/lib/libthr/thread/thr_private.h
@@ -478,8 +478,7 @@ struct pthread {
#define PTHREAD_MAGIC ((u_int32_t) 0xd09ba115)
u_int32_t magic;
char *name;
- u_int64_t uniqueid; /* for gdb */
- thr_id_t thr_id;
+ long thr_id;
sigset_t savedsig;
int signest; /* blocked signal netsting level */
int ptdflags; /* used by other other threads