From a59f26424348f0caf9a3666f9b6ac12565e425e1 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Mon, 18 Nov 2002 22:20:58 +0000 Subject: 2002-11-18 Neal H. Walfield * sysdeps/mach/pt-wakeup.c (__pthread_wakeup): Use the size of THREAD->wakeupmsg which may not be a mach_msg_header_t. * sysdeps/generic/pt-mutex-timedlock.c (__pthread_mutex_timedlock_internal): Really test for equality. * sysdeps/generic/pt-rwlock-timedrdlock.c (__pthread_rwlock_timedrdlock_internal): Likewise. * sysdeps/generic/pt-rwlock-timedwrlock.c (__pthread_rwlock_timedwrlock_internal): Likewise. * sysdeps/generic/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): On timeout, remove our thread structure from the wait queue if necessary. * sysdeps/l4/pt-start.c (__pthread_start): Call L4_Myself, not __mach_thread_self. * sysdeps/mach/hurd/i386/pt-setup.c: Include . (__pthread_setup): Do not leak references from __mach_thread_self. * sysdeps/mach/hurd/pt-docancel.c (__pthread_do_cancel): Likewise. * sysdeps/mach/hurd/pt-sysdep.h (_pthread_self): Likewise. * sysdeps/mach/pt-thread-alloc.c (__pthread_thread_alloc): Likewise. * sysdeps/mach/pt-thread-start.c (__pthread_thread_start): Likewise. * sysdeps/mach/pt-start.c: Remove dead file. --- sysdeps/mach/pt-start.c | 106 ------------------------------------------------ 1 file changed, 106 deletions(-) delete mode 100644 sysdeps/mach/pt-start.c (limited to 'sysdeps/mach/pt-start.c') diff --git a/sysdeps/mach/pt-start.c b/sysdeps/mach/pt-start.c deleted file mode 100644 index 5e8cd5a..0000000 --- a/sysdeps/mach/pt-start.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Start thread. Mach version. - Copyright (C) 2000,02 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#include -#include - -#include - -#include - -/* Prepare a wakeup message. */ -static error_t -create_wakeupmsg (struct __pthread *thread) -{ - kern_return_t err; - - /* Build wakeup message. */ - thread->wakeupmsg.msgh_bits = MACH_MSGH_BITS (MACH_MSG_TYPE_COPY_SEND, 0); - thread->wakeupmsg.msgh_size = 0; - - err = __mach_port_allocate (__mach_task_self (), MACH_PORT_RIGHT_RECEIVE, - &thread->wakeupmsg.msgh_remote_port); - if (err) - return EAGAIN; - - thread->wakeupmsg.msgh_local_port = MACH_PORT_NULL; - thread->wakeupmsg.msgh_seqno = 0; - thread->wakeupmsg.msgh_id = 0; - - err = __mach_port_insert_right (__mach_task_self (), - thread->wakeupmsg.msgh_remote_port, - thread->wakeupmsg.msgh_remote_port, - MACH_MSG_TYPE_MAKE_SEND); - if (err) - { - __mach_port_deallocate (__mach_task_self (), - thread->wakeupmsg.msgh_remote_port); - return EAGAIN; - } - - return 0; -} - -/* Start THREAD. We allocate all system-specific resources, including - a kernel thread, set it up, and get it running. */ -int -__pthread_start (struct __pthread *thread) -{ - error_t err; - - err = create_wakeupmsg (thread); - if (err) - return err; - - /* If there are no pthreads in the system then the pthread library - is bootstrapping and the main thread must create initialize - itself. The thread itself is already running, it just has no - pthread context. We want to reuse what it already has (including - the kernel thread), however, we must determine which thread is - the main thread. - - We cannot test if __pthread_total is one as we later decrement it - before creating the signal thread. Currently, we check if - __pthread_num_threads--the number of allocated thread - structures--is one. __pthread_alloc has already been called in - __pthread_create_internal for us. This predicate could be - improved, however, it is sufficient for now. */ - if (__pthread_num_threads == 1) - { - assert (__pthread_total == 1); - thread->kernel_thread = __mach_thread_self (); - } - else - { - err = __thread_create (__mach_task_self (), &thread->kernel_thread); - if (err) - return EAGAIN; - - err = __thread_set_pcsp (thread->kernel_thread, - 1, thread->mcontext.pc, - 1, thread->mcontext.sp); - assert_perror (err); - - err = __thread_resume (thread->kernel_thread); - assert_perror (err); - } - - return 0; -} -- cgit v1.2.3