From 7ce5c1640cbeb86d2094d992f30438ddda40ac14 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 3 Mar 2003 21:11:12 +0000 Subject: Update. 2003-03-03 Martin Schwidefsky * atomic.h (atomic_exchange_and_add): Return newval, not oldval. * sysdeps/pthread/pthread_cond_timedwait.c (__pthread_cond_timedwait): Fix handling of cancellation and failing pthread_mutex_unlock call. * sysdeps/pthread/pthread_cond_wait.c (__condvar_cleanup): Likewise. (__pthread_cond_wait): Likewise. * sysdeps/pthread/pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Fix clobber of result variable by lll_futex_timed_wait call. * sysdeps/pthread/pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * sysdeps/unix/sysv/linux/s390/libc-lowlevellock.c (___lll_lock): Don't define lll_unlock_wake_cb and ___lll_timedwait_tid in libc.so. * sysdeps/unix/sysv/linux/s390/lowlevellock.c: Remove XXX comments. * sysdeps/unix/sysv/linux/s390/sem_post.c (__new_sem_post): Fix check of lll_futex_wake return value. --- .../unix/sysv/linux/s390/libc-lowlevellock.c | 25 ++++++++++++++++++++-- nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.c | 2 -- nptl/sysdeps/unix/sysv/linux/s390/sem_post.c | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) (limited to 'nptl/sysdeps/unix/sysv') diff --git a/nptl/sysdeps/unix/sysv/linux/s390/libc-lowlevellock.c b/nptl/sysdeps/unix/sysv/linux/s390/libc-lowlevellock.c index 40b5c3e441..7035479c1a 100644 --- a/nptl/sysdeps/unix/sysv/linux/s390/libc-lowlevellock.c +++ b/nptl/sysdeps/unix/sysv/linux/s390/libc-lowlevellock.c @@ -17,5 +17,26 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* No difference to lowlevellock.c */ -#include "lowlevellock.c" +#include +#include +#include +#include + + +void +___lll_lock (futex, newval) + int *futex; + int newval; +{ + do + { + int oldval; + + lll_futex_wait (futex, newval); + lll_compare_and_swap (futex, oldval, newval, "lr %2,%1; ahi %2,-1"); + } + while (newval != 0); + + *futex = -1; +} +hidden_proto (___lll_lock) diff --git a/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.c b/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.c index bc501c7ee4..f98e163ae1 100644 --- a/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.c +++ b/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.c @@ -42,7 +42,6 @@ ___lll_lock (futex, newval) hidden_proto (___lll_lock) -/* XXX Should not be in libc.so */ int lll_unlock_wake_cb (futex) int *futex; @@ -58,7 +57,6 @@ lll_unlock_wake_cb (futex) hidden_proto (lll_unlock_wake_cb) -/* XXX Should not be in libc.so */ int ___lll_timedwait_tid (ptid, abstime) int *ptid; diff --git a/nptl/sysdeps/unix/sysv/linux/s390/sem_post.c b/nptl/sysdeps/unix/sysv/linux/s390/sem_post.c index df64c03ba6..b573532a32 100644 --- a/nptl/sysdeps/unix/sysv/linux/s390/sem_post.c +++ b/nptl/sysdeps/unix/sysv/linux/s390/sem_post.c @@ -34,7 +34,7 @@ __new_sem_post (sem_t *sem) lll_compare_and_swap ((int *) sem, oldval, newval, "lr %2,%1; ahi %2,1"); err = lll_futex_wake(((int *) sem), newval); - if (err != 0) + if (err < 0) { __set_errno(-err); return -1; -- cgit v1.2.3-70-g09d2