(__pthread_rwlock_wrlock): Respect reader preference.
authordrepper <drepper>
Wed, 30 Aug 2006 19:06:30 +0000 (19:06 +0000)
committerdrepper <drepper>
Wed, 30 Aug 2006 19:06:30 +0000 (19:06 +0000)
nptl/sysdeps/pthread/pthread_rwlock_wrlock.c

index 822aeed..4d967f2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -37,7 +37,9 @@ __pthread_rwlock_wrlock (rwlock)
   while (1)
     {
       /* Get the rwlock if there is no writer and no reader.  */
-      if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0)
+      if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0
+         && (rwlock->__data.__flags != 0
+             || rwlock->__data.__nr_readers_queued == 0))
        {
          /* Mark self as writer.  */
          rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);