about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-02-27 10:32:38 +0000
committerUlrich Drepper <drepper@redhat.com>2003-02-27 10:32:38 +0000
commitd2637c70532ba49bf41b25c6aaf1b5d2b09d4aed (patch)
tree055a8b0bf4eb4462552352fbe52793c09f82fdcf /nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
parente361e438a115275fdd56eb25a52b798127adae76 (diff)
downloadglibc-d2637c70532ba49bf41b25c6aaf1b5d2b09d4aed.tar.gz
glibc-d2637c70532ba49bf41b25c6aaf1b5d2b09d4aed.tar.xz
glibc-d2637c70532ba49bf41b25c6aaf1b5d2b09d4aed.zip
Update.
2003-02-24  David Mosberger  <davidm@hpl.hp.com>

	* sysdeps/unix/sysv/linux/ia64/sysdep.S (__syscall_error): Fix
	unwind info.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S26
1 files changed, 25 insertions, 1 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
index bb5f8d1bc8..7dd97ba49e 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
@@ -76,10 +76,25 @@ __pthread_rwlock_unlock:
 	leal	READERS_WAKEUP(%edi), %ebx
 
 0:	incl	(%ebx)
-	xorl	%esi, %esi
+	LOCK
+#if MUTEX == 0
+	decl	(%edi)
+#else
+	decl	MUTEX(%edi)
+#endif
+	jne	7f
+
+8:	xorl	%esi, %esi
 	movl	$SYS_futex, %eax
 	ENTER_KERNEL
 
+	xorl	%eax, %eax
+	popl	%edi
+	popl	%esi
+	popl	%ebx
+	ret
+
+	.align	16
 6:	LOCK
 #if MUTEX == 0
 	decl	(%edi)
@@ -112,6 +127,15 @@ __pthread_rwlock_unlock:
 	call	__lll_mutex_unlock_wake
 	jmp	4b
 
+7:
+#if MUTEX == 0
+	movl	%edi, %eax
+#else
+	leal	MUTEX(%edx), %eax
+#endif
+	call	__lll_mutex_unlock_wake
+	jmp	8b
+
 	.size	__pthread_rwlock_unlock,.-__pthread_rwlock_unlock
 
 	.globl	pthread_rwlock_unlock