diff options
Diffstat (limited to 'nptl/sysdeps/unix')
7 files changed, 28 insertions, 20 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S index 4740aee10d..03892437f6 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2005, 2007, 2009, 2011-2012 Free Software Foundation, Inc. +/* Copyright (C) 2002-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -64,7 +64,7 @@ sem_timedwait: /* Check for invalid nanosecond field. */ cmpl $1000000000, 4(%edi) movl $EINVAL, %esi - jae 6f + jae .Lerrno_exit LOCK incl NWAITERS(%ecx) @@ -146,6 +146,10 @@ sem_timedwait: .Lafter_ret: 3: negl %esi 6: + movl 28(%esp), %ebx /* Load semaphore address. */ + LOCK + decl NWAITERS(%ebx) +.Lerrno_exit: #ifdef PIC SETUP_PIC_REG(bx) #else @@ -162,7 +166,6 @@ sem_timedwait: movl %esi, %gs:(%edx) #endif - movl 28(%esp), %ebx /* Load semaphore address. */ orl $-1, %eax jmp 10b .size sem_timedwait,.-sem_timedwait diff --git a/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c index 903830ea7e..36e00426d9 100644 --- a/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c +++ b/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c @@ -1,5 +1,5 @@ /* sem_timedwait -- wait on a semaphore. Generic futex-using version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. + Copyright (C) 2003, 2007, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -83,7 +83,6 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime) } /* Already timed out? */ - err = -ETIMEDOUT; if (sec < 0) { __set_errno (ETIMEDOUT); diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index 9327860ac9..fe4e3b628b 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -1,5 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -243,6 +242,12 @@ __lll_timedlock_wait: bt .Lreltmo # endif + /* if (timeout->tv_sec < 0) return ETIMEDOUT; */ + mov.l @r6, r1 + cmp/pz r1 + bf/s 5f + mov #ETIMEDOUT, r0 + mov r4, r2 mov r5, r4 mov r7, r5 @@ -278,6 +283,7 @@ __lll_timedlock_wait: neg r0, r3 3: mov r3, r0 +5: rts mov.l @r15+, r12 diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S index d47362fc68..c26e5aa4cb 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2007, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -69,8 +69,8 @@ sem_timedwait: mov.l @(4,r9), r0 mov.l .L1g, r1 cmp/hs r1, r0 - bt/s 6f - mov #EINVAL, r0 + bt/s .Lerrno_exit + mov #EINVAL, r10 INC (@(NWAITERS,r8),r2) 7: @@ -168,6 +168,8 @@ sem_timedwait: neg r0, r0 6: mov r0, r10 + DEC (@(NWAITERS,r8), r2) +.Lerrno_exit: mova .Lgot2, r0 mov.l .Lgot2, r12 add r0, r12 @@ -182,7 +184,6 @@ sem_timedwait: .long errno@GOTTPOFF .Lexit: mov.l r10, @r0 - DEC (@(NWAITERS,r8), r2) bra 10b mov #-1, r0 diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c b/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c index 0b829927d6..f2c2113561 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c @@ -1,5 +1,5 @@ /* sem_post -- post to a POSIX semaphore. SPARC version. - Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2007, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -30,7 +30,7 @@ __new_sem_post (sem_t *sem) { struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; - int nr = atomic_increment_val (&isem->value); + atomic_increment (&isem->value); atomic_full_barrier (); if (isem->nwaiters > 0) { @@ -53,10 +53,11 @@ attribute_compat_text_section __old_sem_post (sem_t *sem) { struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; + int err; - int nr = atomic_increment_val (&isem->value); - int err = lll_futex_wake (&isem->value, 1, - isem->private ^ FUTEX_PRIVATE_FLAG); + atomic_increment (&isem->value); + err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); if (__builtin_expect (err, 0) < 0) { __set_errno (-err); diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c index 7b4e8241a8..8e56bc9c19 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c @@ -1,5 +1,5 @@ /* sem_timedwait -- wait on a semaphore. Generic futex-using version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. + Copyright (C) 2003, 2007, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -83,7 +83,6 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime) } /* Already timed out? */ - err = -ETIMEDOUT; if (sec < 0) { __set_errno (ETIMEDOUT); diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c index 5da15742cf..c9fcd595fc 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c @@ -1,5 +1,5 @@ /* sem_timedwait -- wait on a semaphore. SPARC version. - Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2003, 2006, 2007, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -102,7 +102,6 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime) } /* Already timed out? */ - err = -ETIMEDOUT; if (sec < 0) { __set_errno (ETIMEDOUT); |