summaryrefslogtreecommitdiffstats
path: root/lib/libthr
diff options
context:
space:
mode:
authormtm <mtm@FreeBSD.org>2003-05-25 08:35:37 +0000
committermtm <mtm@FreeBSD.org>2003-05-25 08:35:37 +0000
commit94241277a7c9dc09ec3b0577288fb0c25b782043 (patch)
tree9b6297b8ba0a9925e192db8989f6e5fb4bcfc958 /lib/libthr
parent9b84ee274a05a58268c2f9fcd1bac437c00cbbe3 (diff)
downloadFreeBSD-src-94241277a7c9dc09ec3b0577288fb0c25b782043.zip
FreeBSD-src-94241277a7c9dc09ec3b0577288fb0c25b782043.tar.gz
Part of the last patch.
Modify the thread creation and thread searching routine to lock the thread lists with the new locks instead of GIANT_LOCK. Approved by: re/blanket libthr
Diffstat (limited to 'lib/libthr')
-rw-r--r--lib/libthr/thread/thr_create.c14
-rw-r--r--lib/libthr/thread/thr_find_thread.c4
2 files changed, 9 insertions, 9 deletions
diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c
index 334dc12..3033421 100644
--- a/lib/libthr/thread/thr_create.c
+++ b/lib/libthr/thread/thr_create.c
@@ -155,16 +155,14 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr,
new_thread->flags = 0;
/*
- * Protect the scheduling queues.
- */
- GIANT_LOCK(curthread);
-
- /*
* Initialise the unique id which GDB uses to
* track threads.
*/
new_thread->uniqueid = next_uniqueid++;
+ THREAD_LIST_LOCK;
+ _thread_critical_enter(new_thread);
+
/*
* Check if the garbage collector thread
* needs to be started.
@@ -174,6 +172,8 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr,
/* Add the thread to the linked list of all threads: */
TAILQ_INSERT_HEAD(&_thread_list, new_thread, tle);
+ THREAD_LIST_UNLOCK;
+
/*
* Create the thread.
*
@@ -190,11 +190,11 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr,
PANIC("thr_create");
}
- GIANT_UNLOCK(curthread);
-
/* Return a pointer to the thread structure: */
(*thread) = new_thread;
+ _thread_critical_exit(new_thread);
+
/*
* Start a garbage collector thread
* if necessary.
diff --git a/lib/libthr/thread/thr_find_thread.c b/lib/libthr/thread/thr_find_thread.c
index 1b34f2f..bd51b8f 100644
--- a/lib/libthr/thread/thr_find_thread.c
+++ b/lib/libthr/thread/thr_find_thread.c
@@ -44,7 +44,7 @@ _find_thread(pthread_t pthread)
if (pthread == NULL || pthread->magic != PTHREAD_MAGIC)
return(EINVAL);
- GIANT_LOCK(curthread);
+ THREAD_LIST_LOCK;
/* Search for the specified thread: */
TAILQ_FOREACH(pthread1, &_thread_list, tle) {
@@ -52,7 +52,7 @@ _find_thread(pthread_t pthread)
break;
}
- GIANT_UNLOCK(curthread);
+ THREAD_LIST_UNLOCK;
/* Return zero if the thread exists: */
return ((pthread1 != NULL) ? 0:ESRCH);
OpenPOWER on IntegriCloud