1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-24 17:51:17 +03:00
1999-11-22  Ulrich Drepper  <drepper@cygnus.com>

	* internals.h: Add prototype for __pthread_manager_event.
	* manager.c (__pthread_manager_event): New function.
	(pthread_start_thread_event): Correct computation of self.
	Use INIT_THREAD_SELF.
	* pthread.c (__pthread_manager_thread): Initialize p_lock.
	(__pthread_initialize_manager): Respect event flags also for creation
	of the manager thread.
This commit is contained in:
Ulrich Drepper
1999-11-22 20:53:18 +00:00
parent ba90ec1141
commit 20bdb31bfc
7 changed files with 87 additions and 6 deletions

View File

@@ -182,6 +182,21 @@ int __pthread_manager(void *arg)
}
}
int __pthread_manager_event(void *arg)
{
/* If we have special thread_self processing, initialize it. */
#ifdef INIT_THREAD_SELF
INIT_THREAD_SELF(&__pthread_manager_thread, 1);
#endif
/* Get the lock the manager will free once all is correctly set up. */
__pthread_lock (THREAD_GETMEM((&__pthread_manager_thread), p_lock), NULL);
/* Free it immediately. */
__pthread_unlock (THREAD_GETMEM((&__pthread_manager_thread), p_lock));
return __pthread_manager(arg);
}
/* Process creation */
static int pthread_start_thread(void *arg)
@@ -232,8 +247,11 @@ static int pthread_start_thread(void *arg)
static int pthread_start_thread_event(void *arg)
{
pthread_descr self = thread_self ();
pthread_descr self = (pthread_descr) arg;
#ifdef INIT_THREAD_SELF
INIT_THREAD_SELF(self, self->p_nr);
#endif
/* Get the lock the manager will free once all is correctly set up. */
__pthread_lock (THREAD_GETMEM(self, p_lock), NULL);
/* Free it immediately. */