about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-11-09 09:09:07 +0000
committerUlrich Drepper <drepper@redhat.com>2007-11-09 09:09:07 +0000
commitcbed6a607d6b42b0cb264d2bee1bd784c8504d60 (patch)
treeddbae943982b9b03fc676bf98ce597273de2c268 /nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
parent0f7e0ee507c4bfba62c9059451197e9a25a0598e (diff)
downloadglibc-cbed6a607d6b42b0cb264d2bee1bd784c8504d60.tar.gz
glibc-cbed6a607d6b42b0cb264d2bee1bd784c8504d60.tar.xz
glibc-cbed6a607d6b42b0cb264d2bee1bd784c8504d60.zip
[BZ #5240]
	* sysdeps/unix/sysv/linux/lowlevellock.c (__lll_timedlock_wait):
	If we time out, try one last time to lock the futex to avoid
	losing a wakeup signal.
	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S6
1 files changed, 5 insertions, 1 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
index 745ab91239..6d3943b0eb 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
@@ -203,7 +203,7 @@ __lll_timedlock_wait:
 	addl	$1000000000, %edx
 	subl	$1, %ecx
 4:	testl	%ecx, %ecx
-	js	5f		/* Time is already up.  */
+	js	9f		/* Time is already up.  */
 
 	/* Store relative timeout.  */
 	movl	%ecx, (%esp)
@@ -271,6 +271,10 @@ __lll_timedlock_wait:
 
 5:	movl	$ETIMEDOUT, %eax
 	jmp	6b
+
+9:	movl	$-ETIMEDOUT, %ecx
+	movl	$2, %edx
+	jmp	8b
 	cfi_endproc
 	.size	__lll_timedlock_wait,.-__lll_timedlock_wait
 #endif