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:
parent
9b84ee274a
commit
94241277a7
@ -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.
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user