From 94241277a7c9dc09ec3b0577288fb0c25b782043 Mon Sep 17 00:00:00 2001 From: mtm Date: Sun, 25 May 2003 08:35:37 +0000 Subject: 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 --- lib/libthr/thread/thr_create.c | 14 +++++++------- lib/libthr/thread/thr_find_thread.c | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'lib/libthr') 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); -- cgit v1.1