summaryrefslogtreecommitdiff
path: root/sysdeps/generic
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2012-08-30 23:31:39 +0200
committerThomas Schwinge <thomas@codesourcery.com>2012-08-30 23:31:39 +0200
commit16a92d2765c5732abb64742cb5d387148e0ac629 (patch)
treeabbbadbf54f87eed25f71a312e43ce7f7cb7adfe /sysdeps/generic
parent9a231435f830c459c0e214c2b99877e2ed6edb56 (diff)
parent0096579c8bea920f7c42b40ea22db621da6480a5 (diff)
Merge commit 'refs/top-bases/t/fix_inline' into t/fix_inlinet/fix_inline
Conflicts: sysdeps/l4/hurd/pt-sysdep.h
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/bits/pthreadtypes.h2
-rw-r--r--sysdeps/generic/pt-attr-destroy.c3
-rw-r--r--sysdeps/generic/pt-attr-getdetachstate.c4
-rw-r--r--sysdeps/generic/pt-attr-getinheritsched.c4
-rw-r--r--sysdeps/generic/pt-attr-getschedparam.c4
-rw-r--r--sysdeps/generic/pt-attr-getschedpolicy.c4
-rw-r--r--sysdeps/generic/pt-attr-getscope.c4
-rw-r--r--sysdeps/generic/pt-attr-init.c3
-rw-r--r--sysdeps/generic/pt-attr-setdetachstate.c4
-rw-r--r--sysdeps/generic/pt-attr-setinheritsched.c4
-rw-r--r--sysdeps/generic/pt-attr-setschedparam.c4
-rw-r--r--sysdeps/generic/pt-attr-setschedpolicy.c4
-rw-r--r--sysdeps/generic/pt-attr-setscope.c4
-rw-r--r--sysdeps/generic/pt-attr.c2
-rw-r--r--sysdeps/generic/pt-cond-brdcast.c4
-rw-r--r--sysdeps/generic/pt-cond-destroy.c4
-rw-r--r--sysdeps/generic/pt-cond-init.c4
-rw-r--r--sysdeps/generic/pt-cond-signal.c4
-rw-r--r--sysdeps/generic/pt-cond-timedwait.c9
-rw-r--r--sysdeps/generic/pt-cond-wait.c4
-rw-r--r--sysdeps/generic/pt-condattr-destroy.c4
-rw-r--r--sysdeps/generic/pt-condattr-init.c4
-rw-r--r--sysdeps/generic/pt-condattr-setclock.c27
-rw-r--r--sysdeps/generic/pt-equal.c4
-rw-r--r--sysdeps/generic/pt-getschedparam.c4
-rw-r--r--sysdeps/generic/pt-mutex-timedlock.c2
-rw-r--r--sysdeps/generic/pt-rwlock-timedrdlock.c2
-rw-r--r--sysdeps/generic/pt-rwlock-timedwrlock.c2
-rw-r--r--sysdeps/generic/pt-setschedparam.c4
-rw-r--r--sysdeps/generic/sem-timedwait.c2
30 files changed, 100 insertions, 34 deletions
diff --git a/sysdeps/generic/bits/pthreadtypes.h b/sysdeps/generic/bits/pthreadtypes.h
index e5cbfd2..70368ff 100644
--- a/sysdeps/generic/bits/pthreadtypes.h
+++ b/sysdeps/generic/bits/pthreadtypes.h
@@ -24,6 +24,6 @@
#ifndef _BITS_PTHREADTYPES_H
#define _BITS_PTHREADTYPES_H 1
-#include <pthread.h>
+#include <pthread/pthreadtypes.h>
#endif /* bits/pthreadtypes.h */
diff --git a/sysdeps/generic/pt-attr-destroy.c b/sysdeps/generic/pt-attr-destroy.c
index c4b9aa5..b9bd374 100644
--- a/sysdeps/generic/pt-attr-destroy.c
+++ b/sysdeps/generic/pt-attr-destroy.c
@@ -21,7 +21,8 @@
#include <pt-internal.h>
int
-pthread_attr_destroy (pthread_attr_t *attr)
+__pthread_attr_destroy (pthread_attr_t *attr)
{
return 0;
}
+strong_alias (__pthread_attr_destroy, pthread_attr_destroy);
diff --git a/sysdeps/generic/pt-attr-getdetachstate.c b/sysdeps/generic/pt-attr-getdetachstate.c
index be406f1..b50f913 100644
--- a/sysdeps/generic/pt-attr-getdetachstate.c
+++ b/sysdeps/generic/pt-attr-getdetachstate.c
@@ -21,9 +21,11 @@
#include <pt-internal.h>
int
-pthread_attr_getdetachstate (const pthread_attr_t *attr,
+__pthread_attr_getdetachstate (const pthread_attr_t *attr,
int *detachstate)
{
*detachstate = attr->detachstate;
return 0;
}
+
+strong_alias (__pthread_attr_getdetachstate, pthread_attr_getdetachstate);
diff --git a/sysdeps/generic/pt-attr-getinheritsched.c b/sysdeps/generic/pt-attr-getinheritsched.c
index cca4e3d..7f1f601 100644
--- a/sysdeps/generic/pt-attr-getinheritsched.c
+++ b/sysdeps/generic/pt-attr-getinheritsched.c
@@ -21,9 +21,11 @@
#include <pt-internal.h>
int
-pthread_attr_getinheritsched (const pthread_attr_t *attr,
+__pthread_attr_getinheritsched (const pthread_attr_t *attr,
int *inheritsched)
{
*inheritsched = attr->inheritsched;
return 0;
}
+
+strong_alias (__pthread_attr_getinheritsched, pthread_attr_getinheritsched);
diff --git a/sysdeps/generic/pt-attr-getschedparam.c b/sysdeps/generic/pt-attr-getschedparam.c
index 190cf9d..4519b69 100644
--- a/sysdeps/generic/pt-attr-getschedparam.c
+++ b/sysdeps/generic/pt-attr-getschedparam.c
@@ -24,9 +24,11 @@
#include <pt-internal.h>
int
-pthread_attr_getschedparam (const pthread_attr_t *attr,
+__pthread_attr_getschedparam (const pthread_attr_t *attr,
struct sched_param *param)
{
memcpy (param, &attr->schedparam, sizeof *param);
return 0;
}
+
+strong_alias (__pthread_attr_getschedparam, pthread_attr_getschedparam);
diff --git a/sysdeps/generic/pt-attr-getschedpolicy.c b/sysdeps/generic/pt-attr-getschedpolicy.c
index 4349a23..0980bdd 100644
--- a/sysdeps/generic/pt-attr-getschedpolicy.c
+++ b/sysdeps/generic/pt-attr-getschedpolicy.c
@@ -21,9 +21,11 @@
#include <pt-internal.h>
int
-pthread_attr_getschedpolicy (const pthread_attr_t *attr,
+__pthread_attr_getschedpolicy (const pthread_attr_t *attr,
int *policy)
{
*policy = attr->schedpolicy;
return 0;
}
+
+strong_alias (__pthread_attr_getschedpolicy, pthread_attr_getschedpolicy);
diff --git a/sysdeps/generic/pt-attr-getscope.c b/sysdeps/generic/pt-attr-getscope.c
index 97198fa..46eb604 100644
--- a/sysdeps/generic/pt-attr-getscope.c
+++ b/sysdeps/generic/pt-attr-getscope.c
@@ -21,9 +21,11 @@
#include <pt-internal.h>
int
-pthread_attr_getscope (const pthread_attr_t *attr,
+__pthread_attr_getscope (const pthread_attr_t *attr,
int *contentionscope)
{
*contentionscope = attr->contentionscope;
return 0;
}
+
+strong_alias (__pthread_attr_getscope, pthread_attr_getscope);
diff --git a/sysdeps/generic/pt-attr-init.c b/sysdeps/generic/pt-attr-init.c
index 6a930e3..f9eb361 100644
--- a/sysdeps/generic/pt-attr-init.c
+++ b/sysdeps/generic/pt-attr-init.c
@@ -21,8 +21,9 @@
#include <pt-internal.h>
int
-pthread_attr_init (pthread_attr_t *attr)
+__pthread_attr_init (pthread_attr_t *attr)
{
*attr = __pthread_default_attr;
return 0;
}
+strong_alias (__pthread_attr_init, pthread_attr_init);
diff --git a/sysdeps/generic/pt-attr-setdetachstate.c b/sysdeps/generic/pt-attr-setdetachstate.c
index 688ba5d..abd6bbb 100644
--- a/sysdeps/generic/pt-attr-setdetachstate.c
+++ b/sysdeps/generic/pt-attr-setdetachstate.c
@@ -21,7 +21,7 @@
#include <pt-internal.h>
int
-pthread_attr_setdetachstate (pthread_attr_t *attr,
+__pthread_attr_setdetachstate (pthread_attr_t *attr,
int detachstate)
{
switch (detachstate)
@@ -36,3 +36,5 @@ pthread_attr_setdetachstate (pthread_attr_t *attr,
return 0;
}
+
+strong_alias (__pthread_attr_setdetachstate, pthread_attr_setdetachstate);
diff --git a/sysdeps/generic/pt-attr-setinheritsched.c b/sysdeps/generic/pt-attr-setinheritsched.c
index e9012c5..9fdbd4e 100644
--- a/sysdeps/generic/pt-attr-setinheritsched.c
+++ b/sysdeps/generic/pt-attr-setinheritsched.c
@@ -21,7 +21,7 @@
#include <pt-internal.h>
int
-pthread_attr_setinheritsched (pthread_attr_t *attr,
+__pthread_attr_setinheritsched (pthread_attr_t *attr,
int inheritsched)
{
switch (inheritsched)
@@ -36,3 +36,5 @@ pthread_attr_setinheritsched (pthread_attr_t *attr,
return 0;
}
+
+strong_alias (__pthread_attr_setinheritsched, pthread_attr_setinheritsched);
diff --git a/sysdeps/generic/pt-attr-setschedparam.c b/sysdeps/generic/pt-attr-setschedparam.c
index 5459f10..2fd1d3a 100644
--- a/sysdeps/generic/pt-attr-setschedparam.c
+++ b/sysdeps/generic/pt-attr-setschedparam.c
@@ -24,7 +24,7 @@
#include <pt-internal.h>
int
-pthread_attr_setschedparam (pthread_attr_t *attr,
+__pthread_attr_setschedparam (pthread_attr_t *attr,
const struct sched_param *param)
{
if (memcmp (param, &__pthread_default_attr.schedparam,
@@ -36,3 +36,5 @@ pthread_attr_setschedparam (pthread_attr_t *attr,
return ENOTSUP;
}
+
+strong_alias (__pthread_attr_setschedparam, pthread_attr_setschedparam);
diff --git a/sysdeps/generic/pt-attr-setschedpolicy.c b/sysdeps/generic/pt-attr-setschedpolicy.c
index e481d04..04e93c9 100644
--- a/sysdeps/generic/pt-attr-setschedpolicy.c
+++ b/sysdeps/generic/pt-attr-setschedpolicy.c
@@ -21,7 +21,7 @@
#include <pt-internal.h>
int
-pthread_attr_setschedpolicy (pthread_attr_t *attr,
+__pthread_attr_setschedpolicy (pthread_attr_t *attr,
int policy)
{
switch (policy)
@@ -40,3 +40,5 @@ pthread_attr_setschedpolicy (pthread_attr_t *attr,
return 0;
}
+
+strong_alias (__pthread_attr_setschedpolicy, pthread_attr_setschedpolicy);
diff --git a/sysdeps/generic/pt-attr-setscope.c b/sysdeps/generic/pt-attr-setscope.c
index c74a4f6..d86d7b5 100644
--- a/sysdeps/generic/pt-attr-setscope.c
+++ b/sysdeps/generic/pt-attr-setscope.c
@@ -21,7 +21,7 @@
#include <pt-internal.h>
int
-pthread_attr_setscope (pthread_attr_t *attr,
+__pthread_attr_setscope (pthread_attr_t *attr,
int contentionscope)
{
if (contentionscope == __pthread_default_attr.contentionscope)
@@ -39,3 +39,5 @@ pthread_attr_setscope (pthread_attr_t *attr,
return EINVAL;
}
}
+
+strong_alias (__pthread_attr_setscope, pthread_attr_setscope);
diff --git a/sysdeps/generic/pt-attr.c b/sysdeps/generic/pt-attr.c
index 769f292..e501dc7 100644
--- a/sysdeps/generic/pt-attr.c
+++ b/sysdeps/generic/pt-attr.c
@@ -32,7 +32,7 @@ const struct __pthread_attr __pthread_default_attr =
#ifdef PAGESIZE
guardsize: PAGESIZE,
#else
- guardsize: 0,
+ guardsize: 1,
#endif /* PAGESIZE */
detachstate: PTHREAD_CREATE_JOINABLE,
inheritsched: PTHREAD_EXPLICIT_SCHED,
diff --git a/sysdeps/generic/pt-cond-brdcast.c b/sysdeps/generic/pt-cond-brdcast.c
index 3f55e33..999cc2d 100644
--- a/sysdeps/generic/pt-cond-brdcast.c
+++ b/sysdeps/generic/pt-cond-brdcast.c
@@ -23,7 +23,7 @@
/* Unblock all threads that are blocked on condition variable COND. */
int
-pthread_cond_broadcast (pthread_cond_t *cond)
+__pthread_cond_broadcast (pthread_cond_t *cond)
{
struct __pthread *wakeup;
@@ -40,3 +40,5 @@ pthread_cond_broadcast (pthread_cond_t *cond)
return 0;
}
+
+strong_alias (__pthread_cond_broadcast, pthread_cond_broadcast);
diff --git a/sysdeps/generic/pt-cond-destroy.c b/sysdeps/generic/pt-cond-destroy.c
index eba4778..d72ea75 100644
--- a/sysdeps/generic/pt-cond-destroy.c
+++ b/sysdeps/generic/pt-cond-destroy.c
@@ -21,7 +21,9 @@
#include <pt-internal.h>
int
-pthread_cond_destroy (pthread_cond_t *cond)
+__pthread_cond_destroy (pthread_cond_t *cond)
{
return 0;
}
+
+strong_alias (__pthread_cond_destroy, pthread_cond_destroy);
diff --git a/sysdeps/generic/pt-cond-init.c b/sysdeps/generic/pt-cond-init.c
index b9e9fb7..350f2eb 100644
--- a/sysdeps/generic/pt-cond-init.c
+++ b/sysdeps/generic/pt-cond-init.c
@@ -24,7 +24,7 @@
#include <pt-internal.h>
int
-pthread_cond_init (pthread_cond_t *cond,
+__pthread_cond_init (pthread_cond_t *cond,
const pthread_condattr_t *attr)
{
*cond = (pthread_cond_t) __PTHREAD_COND_INITIALIZER;
@@ -43,3 +43,5 @@ pthread_cond_init (pthread_cond_t *cond,
*cond->__attr = *attr;
return 0;
}
+
+strong_alias (__pthread_cond_init, pthread_cond_init);
diff --git a/sysdeps/generic/pt-cond-signal.c b/sysdeps/generic/pt-cond-signal.c
index c5e1bc1..d7c91e6 100644
--- a/sysdeps/generic/pt-cond-signal.c
+++ b/sysdeps/generic/pt-cond-signal.c
@@ -46,9 +46,11 @@ cond_signal (struct __pthread_cond *cond, int *unblocked)
/* Unblock at least one of the threads that are blocked on condition
variable COND. */
int
-pthread_cond_signal (pthread_cond_t *cond)
+__pthread_cond_signal (pthread_cond_t *cond)
{
int unblocked = 0;
return cond_signal (cond, &unblocked);
}
+
+strong_alias (__pthread_cond_signal, pthread_cond_signal);
diff --git a/sysdeps/generic/pt-cond-timedwait.c b/sysdeps/generic/pt-cond-timedwait.c
index c10bdb3..56eb1ec 100644
--- a/sysdeps/generic/pt-cond-timedwait.c
+++ b/sysdeps/generic/pt-cond-timedwait.c
@@ -26,13 +26,15 @@ extern int __pthread_cond_timedwait_internal (pthread_cond_t *cond,
const struct timespec *abstime);
int
-pthread_cond_timedwait (pthread_cond_t *cond,
+__pthread_cond_timedwait (pthread_cond_t *cond,
pthread_mutex_t *mutex,
const struct timespec *abstime)
{
return __pthread_cond_timedwait_internal (cond, mutex, abstime);
}
+strong_alias (__pthread_cond_timedwait, pthread_cond_timedwait);
+
/* Block on condition variable COND until ABSTIME. As a GNU
extension, if ABSTIME is NULL, then wait forever. MUTEX should be
held by the calling thread. On return, MUTEX will be held by the
@@ -44,6 +46,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond,
{
error_t err;
int canceltype;
+ clockid_t clock_id = __pthread_default_condattr.clock;
void cleanup (void *arg)
{
@@ -66,6 +69,8 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond,
/* Add ourselves to the list of waiters. */
__pthread_spin_lock (&cond->__lock);
__pthread_enqueue (&cond->__queue, self);
+ if (cond->__attr)
+ clock_id = cond->__attr->clock;
__pthread_spin_unlock (&cond->__lock);
__pthread_mutex_unlock (mutex);
@@ -77,7 +82,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond,
if (abstime)
{
- err = __pthread_timedblock (self, abstime);
+ err = __pthread_timedblock (self, abstime, clock_id);
if (err)
/* We timed out. We may need to disconnect ourself from the
waiter queue.
diff --git a/sysdeps/generic/pt-cond-wait.c b/sysdeps/generic/pt-cond-wait.c
index a03476d..38a2ae6 100644
--- a/sysdeps/generic/pt-cond-wait.c
+++ b/sysdeps/generic/pt-cond-wait.c
@@ -31,7 +31,9 @@ extern int __pthread_cond_timedwait_internal (pthread_cond_t *cond,
calling thread. On return, MUTEX will be held by the calling
thread. */
int
-pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
+__pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
{
return __pthread_cond_timedwait_internal (cond, mutex, 0);
}
+
+strong_alias (__pthread_cond_wait, pthread_cond_wait);
diff --git a/sysdeps/generic/pt-condattr-destroy.c b/sysdeps/generic/pt-condattr-destroy.c
index c8fd71b..9fd55b1 100644
--- a/sysdeps/generic/pt-condattr-destroy.c
+++ b/sysdeps/generic/pt-condattr-destroy.c
@@ -21,7 +21,9 @@
#include <pt-internal.h>
int
-pthread_condattr_destroy (pthread_condattr_t *cond)
+__pthread_condattr_destroy (pthread_condattr_t *cond)
{
return 0;
}
+
+strong_alias (__pthread_condattr_destroy, pthread_condattr_destroy);
diff --git a/sysdeps/generic/pt-condattr-init.c b/sysdeps/generic/pt-condattr-init.c
index cf9e198..8570fd1 100644
--- a/sysdeps/generic/pt-condattr-init.c
+++ b/sysdeps/generic/pt-condattr-init.c
@@ -21,8 +21,10 @@
#include <pt-internal.h>
int
-pthread_condattr_init (pthread_condattr_t *attr)
+__pthread_condattr_init (pthread_condattr_t *attr)
{
*attr = __pthread_default_condattr;
return 0;
}
+
+strong_alias (__pthread_condattr_init, pthread_condattr_init);
diff --git a/sysdeps/generic/pt-condattr-setclock.c b/sysdeps/generic/pt-condattr-setclock.c
index 984c17e..c5a78ef 100644
--- a/sysdeps/generic/pt-condattr-setclock.c
+++ b/sysdeps/generic/pt-condattr-setclock.c
@@ -23,11 +23,30 @@
int
pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t clock)
{
- if (__pthread_default_condattr.clock == clock)
+ /* Only a few clocks are allowed. CLOCK_REALTIME is always allowed.
+ CLOCK_MONOTONIC only if the kernel has the necessary support. */
+ if (clock == CLOCK_MONOTONIC)
{
- attr->clock = clock;
- return 0;
+ /* Check whether the clock is available. */
+ static int avail;
+
+ if (avail == 0)
+ {
+ struct timespec ts;
+ int res;
+
+ res = clock_getres (CLOCK_MONOTONIC, &ts);
+ avail = res < 0 ? -1 : 1;
+ }
+
+ if (avail < 0)
+ /* Not available. */
+ return EINVAL;
}
+ else if (clock != CLOCK_REALTIME)
+ return EINVAL;
+
+ attr->clock = clock;
- return EINVAL;
+ return 0;
}
diff --git a/sysdeps/generic/pt-equal.c b/sysdeps/generic/pt-equal.c
index 8fbc519..72fc7e6 100644
--- a/sysdeps/generic/pt-equal.c
+++ b/sysdeps/generic/pt-equal.c
@@ -23,7 +23,9 @@
/* Return true if __T1 and __T2 both name the same thread. Otherwise,
false. */
int
-pthread_equal (pthread_t __t1, pthread_t __t2)
+__pthread_equal (pthread_t __t1, pthread_t __t2)
{
return __t1 == __t2;
}
+
+strong_alias (__pthread_equal, pthread_equal);
diff --git a/sysdeps/generic/pt-getschedparam.c b/sysdeps/generic/pt-getschedparam.c
index c128d02..6ec45fe 100644
--- a/sysdeps/generic/pt-getschedparam.c
+++ b/sysdeps/generic/pt-getschedparam.c
@@ -21,8 +21,10 @@
#include <pt-internal.h>
int
-pthread_getschedparam (pthread_t thread, int *policy,
+__pthread_getschedparam (pthread_t thread, int *policy,
struct sched_param *param)
{
return ENOSYS;
}
+
+strong_alias (__pthread_getschedparam, pthread_getschedparam);
diff --git a/sysdeps/generic/pt-mutex-timedlock.c b/sysdeps/generic/pt-mutex-timedlock.c
index 883e50a..48bffaf 100644
--- a/sysdeps/generic/pt-mutex-timedlock.c
+++ b/sysdeps/generic/pt-mutex-timedlock.c
@@ -130,7 +130,7 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex,
{
error_t err;
- err = __pthread_timedblock (self, abstime);
+ err = __pthread_timedblock (self, abstime, CLOCK_REALTIME);
if (err)
/* We timed out. We may need to disconnect ourself from the
waiter queue.
diff --git a/sysdeps/generic/pt-rwlock-timedrdlock.c b/sysdeps/generic/pt-rwlock-timedrdlock.c
index ba610fa..a110213 100644
--- a/sysdeps/generic/pt-rwlock-timedrdlock.c
+++ b/sysdeps/generic/pt-rwlock-timedrdlock.c
@@ -73,7 +73,7 @@ __pthread_rwlock_timedrdlock_internal (struct __pthread_rwlock *rwlock,
{
error_t err;
- err = __pthread_timedblock (self, abstime);
+ err = __pthread_timedblock (self, abstime, CLOCK_REALTIME);
if (err)
/* We timed out. We may need to disconnect ourself from the
waiter queue.
diff --git a/sysdeps/generic/pt-rwlock-timedwrlock.c b/sysdeps/generic/pt-rwlock-timedwrlock.c
index 04eab51..a5cc579 100644
--- a/sysdeps/generic/pt-rwlock-timedwrlock.c
+++ b/sysdeps/generic/pt-rwlock-timedwrlock.c
@@ -59,7 +59,7 @@ __pthread_rwlock_timedwrlock_internal (struct __pthread_rwlock *rwlock,
{
error_t err;
- err = __pthread_timedblock (self, abstime);
+ err = __pthread_timedblock (self, abstime, CLOCK_REALTIME);
if (err)
/* We timed out. We may need to disconnect ourself from the
waiter queue.
diff --git a/sysdeps/generic/pt-setschedparam.c b/sysdeps/generic/pt-setschedparam.c
index a70b079..14aeb0c 100644
--- a/sysdeps/generic/pt-setschedparam.c
+++ b/sysdeps/generic/pt-setschedparam.c
@@ -21,8 +21,10 @@
#include <pt-internal.h>
int
-pthread_setschedparam (pthread_t thread, int policy,
+__pthread_setschedparam (pthread_t thread, int policy,
const struct sched_param *param)
{
return ENOSYS;
}
+
+strong_alias (__pthread_setschedparam, pthread_setschedparam);
diff --git a/sysdeps/generic/sem-timedwait.c b/sysdeps/generic/sem-timedwait.c
index e34539a..94e6dee 100644
--- a/sysdeps/generic/sem-timedwait.c
+++ b/sysdeps/generic/sem-timedwait.c
@@ -55,7 +55,7 @@ __sem_timedwait_internal (sem_t *restrict sem,
{
error_t err;
- err = __pthread_timedblock (self, timeout);
+ err = __pthread_timedblock (self, timeout, CLOCK_REALTIME);
if (err)
/* We timed out. We may need to disconnect ourself from the
waiter queue.