diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2012-08-30 23:31:39 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2012-08-30 23:31:39 +0200 |
commit | 16a92d2765c5732abb64742cb5d387148e0ac629 (patch) | |
tree | abbbadbf54f87eed25f71a312e43ce7f7cb7adfe /sysdeps/generic/pt-condattr-setclock.c | |
parent | 9a231435f830c459c0e214c2b99877e2ed6edb56 (diff) | |
parent | 0096579c8bea920f7c42b40ea22db621da6480a5 (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/pt-condattr-setclock.c')
-rw-r--r-- | sysdeps/generic/pt-condattr-setclock.c | 27 |
1 files changed, 23 insertions, 4 deletions
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; } |