From 546346b6f849fea25265f48c5b9cf536ef1cf4ee Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 26 May 2007 22:11:42 +0000 Subject: * pthreadP.h (PTHREAD_RWLOCK_PREFER_READER_P): Define. * pthread_rwlock_rdlock.c: Use PTHREAD_RWLOCK_PREFER_READER_P. * pthread_rwlock_timedrdlock.c: Likewise. * pthread_rwlock_tryrdlock.c: Likewise. --- nptl/ChangeLog | 5 +++++ nptl/pthreadP.h | 5 +++++ nptl/pthread_rwlock_rdlock.c | 4 ++-- nptl/pthread_rwlock_timedrdlock.c | 4 ++-- nptl/pthread_rwlock_tryrdlock.c | 4 ++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 2ac2c44078..fc79f9ad87 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,10 @@ 2007-05-26 Ulrich Drepper + * pthreadP.h (PTHREAD_RWLOCK_PREFER_READER_P): Define. + * pthread_rwlock_rdlock.c: Use PTHREAD_RWLOCK_PREFER_READER_P. + * pthread_rwlock_timedrdlock.c: Likewise. + * pthread_rwlock_tryrdlock.c: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S (sem_trywait): Tiny optimization. diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index 21ce6fe0b7..46e24761af 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -118,6 +118,11 @@ enum | PTHREAD_MUTEXATTR_PROTOCOL_MASK | PTHREAD_MUTEXATTR_PRIO_CEILING_MASK) +/* Check whether rwlock prefers readers. */ +#define PTHREAD_RWLOCK_PREFER_READER_P(rwlock) \ + ((rwlock)->__data.__flags == 0) + + /* Bits used in robust mutex implementation. */ #define FUTEX_WAITERS 0x80000000 #define FUTEX_OWNER_DIED 0x40000000 diff --git a/nptl/pthread_rwlock_rdlock.c b/nptl/pthread_rwlock_rdlock.c index e225d7030d..6764c1e9ad 100644 --- a/nptl/pthread_rwlock_rdlock.c +++ b/nptl/pthread_rwlock_rdlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky , 2003. @@ -40,7 +40,7 @@ __pthread_rwlock_rdlock (rwlock) if (rwlock->__data.__writer == 0 /* ...and if either no writer is waiting or we prefer readers. */ && (!rwlock->__data.__nr_writers_queued - || rwlock->__data.__flags == 0)) + || PTHREAD_RWLOCK_PREFER_READER_P (rwlock))) { /* Increment the reader counter. Avoid overflow. */ if (__builtin_expect (++rwlock->__data.__nr_readers == 0, 0)) diff --git a/nptl/pthread_rwlock_timedrdlock.c b/nptl/pthread_rwlock_timedrdlock.c index 80ea83a3dd..caff5894fe 100644 --- a/nptl/pthread_rwlock_timedrdlock.c +++ b/nptl/pthread_rwlock_timedrdlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky , 2003. @@ -43,7 +43,7 @@ pthread_rwlock_timedrdlock (rwlock, abstime) if (rwlock->__data.__writer == 0 /* ...and if either no writer is waiting or we prefer readers. */ && (!rwlock->__data.__nr_writers_queued - || rwlock->__data.__flags == 0)) + || PTHREAD_RWLOCK_PREFER_READER_P (rwlock))) { /* Increment the reader counter. Avoid overflow. */ if (++rwlock->__data.__nr_readers == 0) diff --git a/nptl/pthread_rwlock_tryrdlock.c b/nptl/pthread_rwlock_tryrdlock.c index 446af05969..df8863bcf8 100644 --- a/nptl/pthread_rwlock_tryrdlock.c +++ b/nptl/pthread_rwlock_tryrdlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2002. @@ -32,7 +32,7 @@ __pthread_rwlock_tryrdlock (rwlock) if (rwlock->__data.__writer == 0 && (rwlock->__data.__nr_writers_queued == 0 - || rwlock->__data.__flags == 0)) + || PTHREAD_RWLOCK_PREFER_READER_P (rwlock))) { if (__builtin_expect (++rwlock->__data.__nr_readers == 0, 0)) { -- cgit v1.2.3