diff options
author | Ulrich Drepper <drepper@redhat.com> | 2008-11-01 19:51:41 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2008-11-01 19:51:41 +0000 |
commit | efac1fce6212f0e471ce7fa2519b1d3a4a084ddc (patch) | |
tree | be8d1940955413cdb3bef2fb7e54c58191b398f9 /nptl/pthread_mutex_trylock.c | |
parent | 64647f9aa8727fdcb4c58c7542beca3732148d0a (diff) | |
download | glibc-efac1fce6212f0e471ce7fa2519b1d3a4a084ddc.tar glibc-efac1fce6212f0e471ce7fa2519b1d3a4a084ddc.tar.gz glibc-efac1fce6212f0e471ce7fa2519b1d3a4a084ddc.tar.bz2 glibc-efac1fce6212f0e471ce7fa2519b1d3a4a084ddc.zip |
[BZ #6955]
2008-11-01 Ulrich Drepper <drepper@redhat.com>
[BZ #6955]
* pthread_mutex_lock.c: Add support for private PI mutexes.
* pthread_mutex_timedlock.c: Likewise.
* pthread_mutex_trylock.c: Likewise.
* pthread_mutex_unlock.c: Likewise.
Patch mostly by Ben Jackson <ben@ben.com>.
Diffstat (limited to 'nptl/pthread_mutex_trylock.c')
-rw-r--r-- | nptl/pthread_mutex_trylock.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c index f6e24d4138..25029bedce 100644 --- a/nptl/pthread_mutex_trylock.c +++ b/nptl/pthread_mutex_trylock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005-2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -231,9 +231,13 @@ __pthread_mutex_trylock (mutex) /* The mutex owner died. The kernel will now take care of everything. */ + int private = (robust + ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex) + : PTHREAD_MUTEX_PSHARED (mutex)); INTERNAL_SYSCALL_DECL (__err); int e = INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock, - FUTEX_TRYLOCK_PI, 0, 0); + __lll_private_flag (FUTEX_TRYLOCK_PI, + private), 0, 0); if (INTERNAL_SYSCALL_ERROR_P (e, __err) && INTERNAL_SYSCALL_ERRNO (e, __err) == EWOULDBLOCK) @@ -274,7 +278,9 @@ __pthread_mutex_trylock (mutex) INTERNAL_SYSCALL_DECL (__err); INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock, - FUTEX_UNLOCK_PI, 0, 0); + __lll_private_flag (FUTEX_UNLOCK_PI, + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)), + 0, 0); THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return ENOTRECOVERABLE; |