* sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
authorUlrich Drepper <drepper@redhat.com>
Wed, 5 Dec 2007 02:31:48 +0000 (02:31 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 5 Dec 2007 02:31:48 +0000 (02:31 +0000)
Store 2 before returning ETIMEDOUT.

nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S

index ddecc8b..05d95eb 100644 (file)
@@ -1,3 +1,8 @@
+2007-12-04  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+       * sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
+       Store 2 before returning ETIMEDOUT.
+
 2007-11-23  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S (__lll_timedlock_wait):
index 769cac3..afcf0be 100644 (file)
@@ -225,6 +225,12 @@ __lll_timedlock_wait:
        add     #-8, r15
        cfi_adjust_cfa_offset(8)
 
+       mov     #2, r2
+       XCHG (r2, @r8, r3)
+
+       tst     r3, r3
+       bt      6f
+       
 1:
        /* Get current time.  */
        mov     r15, r4
@@ -250,17 +256,11 @@ __lll_timedlock_wait:
        add     #-1, r2
 4:
        cmp/pz  r2
-       bf      5f              /* Time is already up.  */
+       bf      2f              /* Time is already up.  */
 
        mov.l   r2, @r15        /* Store relative timeout.  */
        mov.l   r3, @(4,r15)
 
-       mov     #1, r3
-       mov     #2, r4
-       CMPXCHG (r3, @r8, r4, r2)
-       tst     r2, r2
-       bt      8f
-
        mov     r8, r4
        mov     r11, r5
        LOAD_FUTEX_WAIT (r5, r0, r1)
@@ -272,39 +272,29 @@ __lll_timedlock_wait:
        SYSCALL_INST_PAD
        mov     r0, r5
 
-8:
-       mov     #0, r3
-       mov     #2, r4
-       CMPXCHG (r3, @r8, r4, r2)
-       bf/s    7f
-        mov    #0, r0
+       mov     #2, r2
+       XCHG (r2, @r8, r3)
+
+       tst     r3, r3
+       bt/s    6f
+        mov    #-ETIMEDOUT, r1
+       cmp/eq  r5, r1
+       bf      1b
+
+2:     mov     #ETIMEDOUT, r3
 
 6:
+       mov     r3, r0
        add     #8, r15
        mov.l   @r15+, r8
        mov.l   @r15+, r9
        mov.l   @r15+, r10
        rts
         mov.l  @r15+, r11
-7:
-       /* Check whether the time expired.  */
-       mov     #-ETIMEDOUT, r1
-       cmp/eq  r5, r1
-       bt      5f
 
-       /* Make sure the current holder knows we are going to sleep.  */
-       XCHG (r2, @r8, r3)
-       tst     r3, r3
-       bt/s    6b
-        mov    #0, r0
-       bra     1b
-        nop
 3:
        rts
         mov    #EINVAL, r0
-5:
-       bra     6b
-        mov    #ETIMEDOUT, r0
        cfi_endproc
 
 .L1k: