From 51feb14bff6b4aa70e2f13a54e26a6b270de3e4d Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sat, 21 Apr 2012 22:07:49 +0000 Subject: Rename pthread functions to be used for forwarding Libc will need to be able to call them, so they need to have a different name. * pthread/pt-exit.c (pthread_exit): Rename with __ prefix and add strong alias. * pthread/pt-self.c (pthread_self): Likewise. * pthread/pt-setcancelstate.c (pthread_setcancelstate): Likewise * pthread/pt-setcanceltype.c (pthread_setcanceltype): Likewise * sysdeps/generic/pt-attr-destroy.c (pthread_attr_destroy): Likewise * sysdeps/generic/pt-attr-getdetachstate.c (pthread_attr_getdetachstate): Likewise * sysdeps/generic/pt-attr-getinheritsched.c (pthread_attr_getinheritsched): Likewise * sysdeps/generic/pt-attr-getschedparam.c (pthread_attr_getschedparam): Likewise * sysdeps/generic/pt-attr-getschedpolicy.c (pthread_attr_getschedpolicy): Likewise * sysdeps/generic/pt-attr-getscope.c (pthread_attr_getscope): Likewise * sysdeps/generic/pt-attr-init.c (pthread_attr_init): Likewise * sysdeps/generic/pt-attr-setdetachstate.c (pthread_attr_setdetachstate): Likewise * sysdeps/generic/pt-attr-setinheritsched.c (pthread_attr_setinheritsched): Likewise * sysdeps/generic/pt-attr-setschedparam.c (pthread_attr_setschedparam): Likewise * sysdeps/generic/pt-attr-setschedpolicy.c (pthread_attr_setschedpolicy): Likewise * sysdeps/generic/pt-attr-setscope.c (pthread_attr_setscope): Likewise * sysdeps/generic/pt-cond-brdcast.c (pthread_cond_broadcast): Likewise * sysdeps/generic/pt-cond-destroy.c (pthread_cond_destroy): Likewise * sysdeps/generic/pt-cond-init.c (pthread_cond_init): Likewise * sysdeps/generic/pt-cond-signal.c (pthread_cond_signal): Likewise * sysdeps/generic/pt-cond-timedwait.c (pthread_cond_timedwait): Likewise * sysdeps/generic/pt-cond-wait.c (pthread_cond_wait): Likewise * sysdeps/generic/pt-condattr-destroy.c (pthread_condattr_destroy): Likewise * sysdeps/generic/pt-condattr-init.c (pthread_condattr_init): Likewise * sysdeps/generic/pt-equal.c (pthread_equal): Likewise * sysdeps/generic/pt-getschedparam.c (pthread_getschedparam): Likewise * sysdeps/generic/pt-setschedparam.c (pthread_setschedparam): Likewise --- sysdeps/generic/pt-attr-destroy.c | 3 ++- sysdeps/generic/pt-attr-getdetachstate.c | 4 +++- sysdeps/generic/pt-attr-getinheritsched.c | 4 +++- sysdeps/generic/pt-attr-getschedparam.c | 4 +++- sysdeps/generic/pt-attr-getschedpolicy.c | 4 +++- sysdeps/generic/pt-attr-getscope.c | 4 +++- sysdeps/generic/pt-attr-init.c | 3 ++- sysdeps/generic/pt-attr-setdetachstate.c | 4 +++- sysdeps/generic/pt-attr-setinheritsched.c | 4 +++- sysdeps/generic/pt-attr-setschedparam.c | 4 +++- sysdeps/generic/pt-attr-setschedpolicy.c | 4 +++- sysdeps/generic/pt-attr-setscope.c | 4 +++- sysdeps/generic/pt-cond-brdcast.c | 4 +++- sysdeps/generic/pt-cond-destroy.c | 4 +++- sysdeps/generic/pt-cond-init.c | 4 +++- sysdeps/generic/pt-cond-signal.c | 4 +++- sysdeps/generic/pt-cond-timedwait.c | 4 +++- sysdeps/generic/pt-cond-wait.c | 4 +++- sysdeps/generic/pt-condattr-destroy.c | 4 +++- sysdeps/generic/pt-condattr-init.c | 4 +++- sysdeps/generic/pt-equal.c | 4 +++- sysdeps/generic/pt-getschedparam.c | 4 +++- sysdeps/generic/pt-setschedparam.c | 4 +++- 23 files changed, 67 insertions(+), 23 deletions(-) (limited to 'sysdeps/generic') 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 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 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 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 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 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 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 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 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 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 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 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 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-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 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 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..483f277 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 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 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 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-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 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-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 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); -- cgit v1.2.3 From dbaf5693972d2cbfad0ad48b966e5693b770127e Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Sun, 22 Apr 2012 00:22:47 +0200 Subject: __pthread_timedblock: add an argument for the clock id To make `__pthread_timedblock' properly measure time using the right clock, add a new argument representing the clock to use. * pthread/pt-internal.h (__pthread_timedblock): New argument CLOCK_ID. * sysdeps/l4/pt-timedblock.c (__pthread_timedblock): Likewise. * sysdeps/mach/pt-timedblock.c (__pthread_timedblock): Likewise. * sysdeps/generic/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): Pass the clock of the `pthread_cond' to `__pthread_timedblock'. * sysdeps/generic/pt-mutex-timedlock.c (__pthread_mutex_timedlock_internal): Pass CLOCK_REALTIME to `__pthread_timedblock'. * sysdeps/generic/pt-rwlock-timedrdlock.c (__pthread_rwlock_timedrdlock_internal): Likewise. * sysdeps/generic/pt-rwlock-timedwrlock.c (__pthread_rwlock_timedwrlock_internal): Likewise. * sysdeps/generic/sem-timedwait.c (__sem_timedwait_internal): Likewise. --- pthread/pt-internal.h | 3 ++- sysdeps/generic/pt-cond-timedwait.c | 5 ++++- sysdeps/generic/pt-mutex-timedlock.c | 2 +- sysdeps/generic/pt-rwlock-timedrdlock.c | 2 +- sysdeps/generic/pt-rwlock-timedwrlock.c | 2 +- sysdeps/generic/sem-timedwait.c | 2 +- sysdeps/l4/pt-timedblock.c | 3 ++- sysdeps/mach/pt-timedblock.c | 3 ++- 8 files changed, 14 insertions(+), 8 deletions(-) (limited to 'sysdeps/generic') diff --git a/pthread/pt-internal.h b/pthread/pt-internal.h index 6186c86..a1e90aa 100644 --- a/pthread/pt-internal.h +++ b/pthread/pt-internal.h @@ -254,7 +254,8 @@ extern void __pthread_block (struct __pthread *thread); /* Block THREAD until *ABSTIME is reached. */ extern error_t __pthread_timedblock (struct __pthread *__restrict thread, - const struct timespec *__restrict abstime); + const struct timespec *__restrict abstime, + clockid_t clock_id); /* Wakeup THREAD. */ extern void __pthread_wakeup (struct __pthread *thread); diff --git a/sysdeps/generic/pt-cond-timedwait.c b/sysdeps/generic/pt-cond-timedwait.c index 483f277..56eb1ec 100644 --- a/sysdeps/generic/pt-cond-timedwait.c +++ b/sysdeps/generic/pt-cond-timedwait.c @@ -46,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) { @@ -68,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); @@ -79,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-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/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. diff --git a/sysdeps/l4/pt-timedblock.c b/sysdeps/l4/pt-timedblock.c index ce7972b..951644f 100644 --- a/sysdeps/l4/pt-timedblock.c +++ b/sysdeps/l4/pt-timedblock.c @@ -27,7 +27,8 @@ /* Block THREAD. */ error_t __pthread_timedblock (struct __pthread *thread, - const struct timespec *abstime) + const struct timespec *abstime, + clockid_t clock_id) { #warning Need gettimeofday to implement properly. __pthread_block (thread); diff --git a/sysdeps/mach/pt-timedblock.c b/sysdeps/mach/pt-timedblock.c index 6f54726..88beaa2 100644 --- a/sysdeps/mach/pt-timedblock.c +++ b/sysdeps/mach/pt-timedblock.c @@ -30,7 +30,8 @@ /* Block THREAD. */ error_t __pthread_timedblock (struct __pthread *thread, - const struct timespec *abstime) + const struct timespec *abstime, + clockid_t clock_id) { error_t err; mach_msg_header_t msg; -- cgit v1.2.3 From 581b822ea36002817f4c22b9ea715b72a0647166 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Sun, 22 Apr 2012 00:44:24 +0200 Subject: pthread_condattr_setclock: allow a monotonic clock, if present If CLOCK_MONOTONIC is requested, check (only once) for the availability of a monotonic clock using `clock_getres'. If it is not, reject CLOCK_MONOTONIC with EINVAL (as before). * sysdeps/generic/pt-condattr-setclock.c (pthread_condattr_setclock): Check for monotonic clock if requested. --- sysdeps/generic/pt-condattr-setclock.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'sysdeps/generic') 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; } -- cgit v1.2.3 From cf4bfa4a4c5216e2d07a7fec4aa6487fa56003c9 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 22 Apr 2012 16:52:46 +0000 Subject: Install bits/pthreadtypes.h And make it expose only types, not the rest of the pthread API. * Makefile (headers): Add bits/pthreadtypes.h. * sysdeps/generic/bits/pthreadtypes.h: Include instead of --- Makefile | 1 + sysdeps/generic/bits/pthreadtypes.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'sysdeps/generic') diff --git a/Makefile b/Makefile index 73f90da..4bc0101 100644 --- a/Makefile +++ b/Makefile @@ -164,6 +164,7 @@ headers := \ \ bits/pthread.h \ bits/pthread-np.h \ + bits/pthreadtypes.h \ bits/mutex.h \ bits/condition.h \ bits/condition-attr.h \ 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 +#include #endif /* bits/pthreadtypes.h */ -- cgit v1.2.3 From 966245ae2a9b17a58205751e6251fdb84ee89fce Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 8 Jul 2012 20:54:19 +0200 Subject: Default to a little guardsize Later rounded up to a page. * sysdeps/generic/pt-attr.c (__pthread_default_attr) [!PAGESIZE]: Set guardsize field to 1. --- sysdeps/generic/pt-attr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sysdeps/generic') 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, -- cgit v1.2.3