summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/s390
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-03 21:11:12 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-03 21:11:12 +0000
commit7ce5c1640cbeb86d2094d992f30438ddda40ac14 (patch)
tree63f44821134b350f7eef50c06f75b4a4caf5b71b /nptl/sysdeps/unix/sysv/linux/s390
parent625f22fc7f8e0d61e3e6cff2c65468b91dbad426 (diff)
Update.
2003-03-03 Martin Schwidefsky <schwidefsky@de.ibm.com> * 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.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/s390')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/libc-lowlevellock.c25
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.c2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/sem_post.c2
3 files changed, 24 insertions, 5 deletions
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 <errno.h>
+#include <sysdep.h>
+#include <lowlevellock.h>
+#include <sys/time.h>
+
+
+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;