about summary refs log tree commit diff
path: root/nptl/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-03 08:14:47 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-03 08:14:47 +0000
commit842d28175225c0e964a723603bd11736ee29334f (patch)
tree0a5da645e49d2726d4955461cab2584621f3273a /nptl/sysdeps
parent0e07706e5b3ee66520170e8440b731903b1ccf6d (diff)
downloadglibc-842d28175225c0e964a723603bd11736ee29334f.tar.gz
glibc-842d28175225c0e964a723603bd11736ee29334f.tar.xz
glibc-842d28175225c0e964a723603bd11736ee29334f.zip
Update.
	* sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
	(__pthread_cond_wait): Don't save cancellation mode and seq value
	in same location.
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S26
1 files changed, 21 insertions, 5 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
index 1cbf2ea97a..0187bf8253 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -141,8 +141,8 @@ __pthread_cond_wait:
 	/* Get and store current wakeup_seq value.  */
 	movl	wakeup_seq(%ebx), %edi
 	movl	wakeup_seq+4(%ebx), %edx
-	movl	%edi, (%esp)
-	movl	%edx, 4(%esp)
+	movl	%edi, 4(%esp)
+	movl	%edx, 8(%esp)
 
 	/* Unlock.  */
 8:	LOCK
@@ -182,10 +182,10 @@ __pthread_cond_wait:
 	movl	wakeup_seq(%ebx), %edi
 	movl	wakeup_seq+4(%ebx), %edx
 
-	cmpl	4(%esp), %ecx
+	cmpl	8(%esp), %ecx
 	ja	7f
 	jb	8b
-	cmpl	(%esp), %eax
+	cmpl	4(%esp), %eax
 	jb	8b
 
 7:	cmpl	%ecx, %edx
@@ -503,7 +503,11 @@ __pthread_cond_signal:
 	/* Get internal lock.  */
 	movl	$1, %eax
 	LOCK
+#if cond_lock == 0
+	xaddl	%eax, (%ebx)
+#else
 	xaddl	%eax, cond_lock(%ebx)
+#endif
 	testl	%eax, %eax
 	jne	1f
 
@@ -531,7 +535,11 @@ __pthread_cond_signal:
 
 	/* Unlock.  */
 4:	LOCK
+#if cond_lock == 0
+	decl	(%ebx)
+#else
 	decl	cond_lock(%ebx)
+#endif
 	jne	5f
 
 6:	xorl	%eax, %eax
@@ -580,7 +588,11 @@ __pthread_cond_broadcast:
 	/* Get internal lock.  */
 	movl	$1, %eax
 	LOCK
+#if cond_lock == 0
+	xaddl	%eax, (%ebx)
+#else
 	xaddl	%eax, cond_lock(%ebx)
+#endif
 	testl	%eax, %eax
 	jne	1f
 
@@ -608,7 +620,11 @@ __pthread_cond_broadcast:
 
 	/* Unlock.  */
 4:	LOCK
+#if cond_lock == 0
+	decl	(%ebx)
+#else
 	decl	cond_lock(%ebx)
+#endif
 	jne	5f
 
 6:	xorl	%eax, %eax