summaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-03-02 09:06:20 +0000
committerJakub Jelinek <jakub@redhat.com>2006-03-02 09:06:20 +0000
commit4a22fa60cd42eba5ab1931547be33f7764ef6f73 (patch)
treebf57a7c7809c17153a9d680ebf8c6e4dd553cd64 /nptl
parenta07552b6e042c28f925c6df06a1849f734975ea2 (diff)
Updated to fedora-glibc-20060302T0855
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog13
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S2
4 files changed, 21 insertions, 2 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 3eb1482f8c..b35cfddcac 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,16 @@
+2006-03-01 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
+ (__lll_robust_lock_wait): Also set FUTEX_WAITERS bit if we got the
+ mutex.
+ (__lll_robust_timedlock_wait): Likewise.
+ * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S
+ (__lll_robust_lock_wait): Likewise.
+ (__lll_robust_timedlock_wait): Likewise.
+ * sysdeps/unix/sysv/linux/lowlevelrobustlock.c
+ (__lll_robust_lock_wait): Likewise.
+ (__lll_robust_timedlock_wait): Likewise.
+
2006-03-01 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/sparc/lowlevellock.h (lll_robust_mutex_dead,
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S
index 1c516c7424..ff09745060 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 b7faeaf257..3e88ee1866 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;
}
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
index 7bb9191691..1a088e27b1 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
@@ -78,6 +78,7 @@ __lll_robust_mutex_lock_wait:
jne 4b
movl %fs:TID, %edx
+ orl $FUTEX_WAITERS, %edx
LOCK
cmpxchgl %edx, (%rdi)
jnz 4b
@@ -169,6 +170,7 @@ __lll_robust_mutex_timedlock_wait:
jne 7f
movl %fs:TID, %edx
+ orl $FUTEX_WAITERS, %edx
LOCK
cmpxchgl %edx, (%r12)
jnz 7f