diff options
Diffstat (limited to 'linuxthreads')
-rw-r--r-- | linuxthreads/linuxthreads/ChangeLog | 9 | ||||
-rw-r--r-- | linuxthreads/linuxthreads/linuxthreads.texi | 2 | ||||
-rw-r--r-- | linuxthreads/linuxthreads/sysdeps/pthread/gai_misc.h | 72 |
3 files changed, 82 insertions, 1 deletions
diff --git a/linuxthreads/linuxthreads/ChangeLog b/linuxthreads/linuxthreads/ChangeLog index f754534df..3b440b023 100644 --- a/linuxthreads/linuxthreads/ChangeLog +++ b/linuxthreads/linuxthreads/ChangeLog @@ -1,3 +1,12 @@ +2006-09-22 Carlos O'Donell <carlos@systemhalted.org> + + * sysdeps/pthread/gai_misc.h: New file. + +2006-09-21 Richard Sandiford <richard@codesourcery.com> + + * linuxthreads.texi (pthread_mutex_lock): Fix double close bracket. + Fix markup. + 2006-07-24 Daniel Jacobowitz <dan@codesourcery.com> * pthread.c: Check PTHREAD_SIGBASE before #error. diff --git a/linuxthreads/linuxthreads/linuxthreads.texi b/linuxthreads/linuxthreads/linuxthreads.texi index 795fb7097..be5b0e098 100644 --- a/linuxthreads/linuxthreads/linuxthreads.texi +++ b/linuxthreads/linuxthreads/linuxthreads.texi @@ -614,7 +614,7 @@ recursive mutexes), @code{PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP} @comment pthread.h @comment POSIX -@deftypefun int pthread_mutex_lock (pthread_mutex_t *mutex)) +@deftypefun int pthread_mutex_lock (pthread_mutex_t *@var{mutex}) @code{pthread_mutex_lock} locks the given mutex. If the mutex is currently unlocked, it becomes locked and owned by the calling thread, and @code{pthread_mutex_lock} returns immediately. If the mutex is diff --git a/linuxthreads/linuxthreads/sysdeps/pthread/gai_misc.h b/linuxthreads/linuxthreads/sysdeps/pthread/gai_misc.h new file mode 100644 index 000000000..b7be50747 --- /dev/null +++ b/linuxthreads/linuxthreads/sysdeps/pthread/gai_misc.h @@ -0,0 +1,72 @@ +/* Copyright (C) 2006 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* We define a special synchronization primitive for AIO. POSIX + conditional variables would be ideal but the pthread_cond_*wait + operations do not return on EINTR. This is a requirement for + correct aio_suspend and lio_listio implementations. */ + +#include <assert.h> +#include <signal.h> + +#undef DONT_NEED_GAI_MISC_COND + +#define gai_start_notify_thread __gai_start_notify_thread +#define gai_create_helper_thread __gai_create_helper_thread + +extern inline void +__gai_start_notify_thread (void) +{ + sigset_t ss; + sigemptyset (&ss); + INTERNAL_SYSCALL_DECL (err); + INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8); +} + +extern inline int +__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), + void *arg) +{ + pthread_attr_t attr; + + /* Make sure the thread is created detached. */ + pthread_attr_init (&attr); + pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + /* The helper thread needs only very little resources. */ + (void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN); + + /* Block all signals in the helper thread. To do this thoroughly we + temporarily have to block all signals here. */ + sigset_t ss; + sigset_t oss; + sigfillset (&ss); + INTERNAL_SYSCALL_DECL (err); + INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, &oss, _NSIG / 8); + + int ret = pthread_create (threadp, &attr, tf, arg); + + /* Restore the signal mask. */ + INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &oss, NULL, + _NSIG / 8); + + (void) pthread_attr_destroy (&attr); + return ret; +} + +#include_next <gai_misc.h> |