summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPino Toscano <toscano.pino@tiscali.it>2012-04-22 00:22:47 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2012-04-22 01:18:44 +0200
commitdbaf5693972d2cbfad0ad48b966e5693b770127e (patch)
tree1bf000933a1fbbb4e8136c472fe1cb312139430e
parentc310aa40efd3b2d954354e0550b1bbb6a8e7e349 (diff)
__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.
-rw-r--r--pthread/pt-internal.h3
-rw-r--r--sysdeps/generic/pt-cond-timedwait.c5
-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/sem-timedwait.c2
-rw-r--r--sysdeps/l4/pt-timedblock.c3
-rw-r--r--sysdeps/mach/pt-timedblock.c3
8 files changed, 14 insertions, 8 deletions
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;