Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Jun 2004 04:34:55 GMT
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 55973 for review
Message-ID:  <200406280434.i5S4Ytpg034414@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=55973

Change 55973 by marcel@marcel_nfs on 2004/06/28 04:34:18

	Have libthr() call getlwpid() and save the LWP in the thread
	structure. Rename uniqueid to lwpid. The use of uniqueid was
	simply copied from libc_r.
	
	Note that libthr uses a thread id (thr_id_t) that is the
	address of the kernel thread structure. This can be replaced
	in its entirety by using the lwpid. There is not performance
	loss. However, changing that would change the thr_* syscalls
	as well as the umtx_* functions and syscalls. This is a
	major ABI breakage and thus is not done.

Affected files ...

.. //depot/projects/gdb/lib/libthr/thread/thr_cond.c#5 edit
.. //depot/projects/gdb/lib/libthr/thread/thr_create.c#5 edit
.. //depot/projects/gdb/lib/libthr/thread/thr_init.c#5 edit
.. //depot/projects/gdb/lib/libthr/thread/thr_mutex.c#6 edit
.. //depot/projects/gdb/lib/libthr/thread/thr_private.h#7 edit

Differences ...

==== //depot/projects/gdb/lib/libthr/thread/thr_cond.c#5 (text+ko) ====

@@ -440,10 +440,10 @@
 	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);
+		    pthread->name, pthread->lwpid);
 	if ((pthread->flags & PTHREAD_FLAGS_IN_MUTEXQ) != 0)
 		_thread_printf(2, "Thread (%s:%u) already on mutexq\n",
-		    pthread->name, pthread->uniqueid);
+		    pthread->name, pthread->lwpid);
 	PTHREAD_ASSERT_NOT_IN_SYNCQ(pthread);
 
 	/*

==== //depot/projects/gdb/lib/libthr/thread/thr_create.c#5 (text+ko) ====

@@ -43,11 +43,9 @@
 #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_lwpid_offset		= OFF(lwpid);
 int _thread_name_offset			= OFF(name);
 int _thread_ctx_offset			= OFF(ctx);
 #undef OFF
@@ -137,12 +135,6 @@
 	}
 	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: */
@@ -178,6 +170,9 @@
 _thread_start(void)
 {
 
+	/* Initialise the unique id which GDB uses to track threads. */
+	curthread->lwpid = getlwpid();
+
 	/* Run the current thread's start routine with argument: */
 	pthread_exit(curthread->start_routine(curthread->arg));
 

==== //depot/projects/gdb/lib/libthr/thread/thr_init.c#5 (text+ko) ====

@@ -304,6 +304,7 @@
 
 	/* Get our thread id. */
 	thr_self(&pthread->thr_id);
+	pthread->lwpid = getlwpid();
 
 	/* Find the stack top */
 	mib[0] = CTL_KERN;

==== //depot/projects/gdb/lib/libthr/thread/thr_mutex.c#6 (text+ko) ====

@@ -800,10 +800,10 @@
 	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);
+		    pthread->name, pthread->lwpid);
 	if ((pthread->flags & PTHREAD_FLAGS_IN_MUTEXQ) != 0)
 		_thread_printf(2, "Thread (%s:%u) already on mutexq\n",
-		    pthread->name, pthread->uniqueid);
+		    pthread->name, pthread->lwpid);
 	PTHREAD_ASSERT_NOT_IN_SYNCQ(pthread);
 	/*
 	 * For the common case of all threads having equal priority,

==== //depot/projects/gdb/lib/libthr/thread/thr_private.h#7 (text+ko) ====

@@ -470,8 +470,8 @@
 	 */
 #define	PTHREAD_MAGIC		((u_int32_t) 0xd09ba115)
 	u_int32_t		magic;
+	lwpid_t			lwpid; /* for gdb */
 	char			*name;
-	u_int64_t		uniqueid; /* for gdb */
 	thr_id_t		thr_id;
 	sigset_t		savedsig;
 	int			signest; /* blocked signal netsting level */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406280434.i5S4Ytpg034414>