From 42b6ddfca528a12ff7b4065e8ca8c2631d754260 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 2 Mar 2006 00:25:56 +0000 Subject: [PATCH] (__lll_robust_lock_wait): Also set FUTEX_WAITERS buit if we got the mutex. (__lll_robust_timedlock_wait): Likewise. --- nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S | 2 ++ nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S index 1c516c7..ff09745 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S @@ -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 diff --git a/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c b/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c index b7faeaf..3e88ee1 100644 --- a/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c +++ b/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c @@ -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; } -- 2.7.4