about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nptl/ChangeLog5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S10
2 files changed, 10 insertions, 5 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 5a59e9a029..cd451c83c3 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-09  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
+	(__pthread_cond_signal): Some more tweaks to handle cond_lock!=0.
+
 2003-06-08  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/unix/sysv/linux/s390/sem_wait.c (__new_sem_wait): Make
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
index 4b4fc051cb..c89851d373 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
@@ -65,6 +65,9 @@ __pthread_cond_signal:
 	movl	total_seq+4(%edi), %eax
 	movl	total_seq(%edi), %ecx
 	cmpl	4(%ebx), %eax
+#if cond_lock != 0
+	leal	cond_lock(%edi), %edi
+#endif
 	ja	3f
 	jb	4f
 	cmpl	(%ebx), %ecx
@@ -90,13 +93,10 @@ __pthread_cond_signal:
 	testl	%eax, %eax
 	jne	5f
 
-	/* Unlock.  */
+	/* Unlock.  Note that at this point %edi always points to
+	   cond_lock.  */
 4:	LOCK
-#if cond_lock == 0
 	subl	$1, (%edi)
-#else
-	subl	$1, cond_lock(%edi)
-#endif
 	jne	5f
 
 6:	xorl	%eax, %eax