summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-05-26 02:47:39 +0000
committerUlrich Drepper <drepper@redhat.com>2003-05-26 02:47:39 +0000
commit69431c9a21f7393f34330a27df1630520930789e (patch)
tree1fbd3f1520502c833e676afa3fb5410f92654f85 /nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
parent6a998b09ec734d8dd40e690244122a43bf9d7a16 (diff)
Update.
2003-05-25 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/kernel-features.h: Define __ASSUME_FUTEX_REQUEUE for >= 2.5.70. * math/test-fenv.c (feexcp_nomask_test): Fix comment.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S21
1 files changed, 11 insertions, 10 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
index 1ac6c1a7d6..61d3d8d225 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
@@ -83,15 +83,11 @@ __condvar_cleanup:
movl $0x7fffffff, %edx
ENTER_KERNEL
- /* Lock the mutex unless asynchronous cancellation is in effect. */
- testl $2, 8(%esi)
- jne 3f
-
pushl (%esi)
- call __pthread_mutex_lock_internal
+ call __pthread_mutex_cond_lock
popl %eax
-3: popl %esi
+ popl %esi
popl %ebx
ret
.size __condvar_cleanup, .-__condvar_cleanup
@@ -125,8 +121,13 @@ __pthread_cond_wait:
testl %eax, %eax
jne 1f
+ /* Store the reference to the mutex. If there is already a
+ different value in there this is a bad user bug. */
+2: movl 20(%esp), %eax
+ movl %eax, dep_mutex(%ebx)
+
/* Unlock the mutex. */
-2: pushl 20(%esp)
+ pushl %eax
.Lpush4:
call __pthread_mutex_unlock_internal
@@ -171,8 +172,8 @@ __pthread_cond_wait:
#endif
jne 3f
-4: leal 8(%esp), %eax
- call __pthread_enable_asynccancel_2
+4: call __pthread_enable_asynccancel
+ movl %eax, 8(%esp)
movl %esi, %ecx /* movl $FUTEX_WAIT, %ecx */
movl %edi, %edx
@@ -229,7 +230,7 @@ __pthread_cond_wait:
movl %edx, %gs:CLEANUP
/* Trick ahead: (%esp) contains the address of the mutex. */
- call __pthread_mutex_lock_internal
+ call __pthread_mutex_cond_lock
addl $36, %esp
.Laddl: