(__lll_robust_lock_wait): Also set FUTEX_WAITERS buit if we got the mutex. (__lll_rob...
authorUlrich Drepper <drepper@redhat.com>
Thu, 2 Mar 2006 00:25:56 +0000 (00:25 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 2 Mar 2006 00:25:56 +0000 (00:25 +0000)
nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S
nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c

index 1c516c7..ff09745 100644 (file)
@@ -74,6 +74,7 @@ __lll_robust_mutex_lock_wait:
        jne     4b
 
        movl    %gs:TID, %edx
+       orl     $FUTEX_WAITERS, %edx
        LOCK
        cmpxchgl %edx, (%ebx)
        jnz     4b
@@ -163,6 +164,7 @@ __lll_robust_mutex_timedlock_wait:
        jne     7f
 
        movl    %gs:TID, %edx
+       orl     $FUTEX_WAITERS, %edx
        LOCK
        cmpxchgl %edx, (%ebx)
        jnz     7f
index b7faeaf..3e88ee1 100644 (file)
@@ -42,7 +42,9 @@ __lll_robust_lock_wait (int *futex)
 
       lll_futex_wait (futex, newval);
     }
-  while ((oldval = atomic_compare_and_exchange_val_acq (futex, tid, 0)) != 0);
+  while ((oldval = atomic_compare_and_exchange_val_acq (futex,
+                                                       tid | FUTEX_WAITERS,
+                                                       0)) != 0);
   return 0;
 }
 
@@ -89,7 +91,7 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime)
 
       lll_futex_timed_wait (futex, newval, &rt);
     }
-  while (atomic_compare_and_exchange_bool_acq (futex, tid, 0));
+  while (atomic_compare_and_exchange_bool_acq (futex, tid | FUTEX_WAITERS, 0));
 
   return 0;
 }