diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-12-05 02:31:48 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-12-05 02:31:48 +0000 |
commit | 191ec77f9b5c2c34dfd7980c097b5a8cd701ec25 (patch) | |
tree | c014825212771e3371233db4b76f48fd92ebfc7f /nptl | |
parent | da0ff4ae5ba18db9c82522ea0fce26b327ea10ee (diff) | |
download | glibc-191ec77f9b5c2c34dfd7980c097b5a8cd701ec25.tar.gz glibc-191ec77f9b5c2c34dfd7980c097b5a8cd701ec25.tar.xz glibc-191ec77f9b5c2c34dfd7980c097b5a8cd701ec25.zip |
* sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
Store 2 before returning ETIMEDOUT.
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/ChangeLog | 5 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S | 46 |
2 files changed, 23 insertions, 28 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index ddecc8bef5..05d95eb3b4 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -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): diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index 769cac3ccd..afcf0be299 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -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: |