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
This commit is contained in:
mtm 2003-05-25 08:35:37 +00:00
parent 9b84ee274a
commit 94241277a7
2 changed files with 9 additions and 9 deletions

View File

@ -154,17 +154,15 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr,
new_thread->cleanup = NULL;
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.

View File

@ -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);