diff options
author | Mike Crowe <mac@mcrowe.com> | 2019-10-31 10:03:21 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-11-01 11:23:43 -0300 |
commit | 69ca4b54c151cec42ccca5e05790efc1a8206b47 (patch) | |
tree | e239090413e1da5dbd3a9fc3ce54895da5624346 /nptl/tst-join3.c | |
parent | 893bbdd0072fbf96808e66af04b970e5b39171fb (diff) | |
download | glibc-69ca4b54c151cec42ccca5e05790efc1a8206b47.tar glibc-69ca4b54c151cec42ccca5e05790efc1a8206b47.tar.gz glibc-69ca4b54c151cec42ccca5e05790efc1a8206b47.tar.bz2 glibc-69ca4b54c151cec42ccca5e05790efc1a8206b47.zip |
nptl: Add pthread_clockjoin_np
Introduce pthread_clockjoin_np as a version of pthread_timedjoin_np that
accepts a clockid_t parameter to indicate which clock the timeout should be
measured against. This mirrors the recently-added POSIX-proposed "clock"
wait functions.
Checked on x86_64-linux-gnu.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'nptl/tst-join3.c')
-rw-r--r-- | nptl/tst-join3.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/nptl/tst-join3.c b/nptl/tst-join3.c index a4ae459543..faf7683eaa 100644 --- a/nptl/tst-join3.c +++ b/nptl/tst-join3.c @@ -28,6 +28,8 @@ #include <support/xtime.h> +#define CLOCK_USE_TIMEDJOIN (-1) + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; @@ -35,32 +37,44 @@ static void * tf (void *arg) { xpthread_mutex_lock (&lock); + xpthread_mutex_unlock (&lock); return (void *) 42l; } static int -do_test (void) +do_test_clock (clockid_t clockid) { + const clockid_t clockid_for_get = + (clockid == CLOCK_USE_TIMEDJOIN) ? CLOCK_REALTIME : clockid; + xpthread_mutex_lock (&lock); pthread_t th = xpthread_create (NULL, tf, NULL); void *status; - struct timespec timeout = timespec_add (xclock_now (CLOCK_REALTIME), + struct timespec timeout = timespec_add (xclock_now (clockid_for_get), make_timespec (0, 200000000)); - int val = pthread_timedjoin_np (th, &status, &timeout); + int val; + if (clockid == CLOCK_USE_TIMEDJOIN) + val = pthread_timedjoin_np (th, &status, &timeout); + else + val = pthread_clockjoin_np (th, &status, clockid, &timeout); + TEST_COMPARE (val, ETIMEDOUT); xpthread_mutex_unlock (&lock); while (1) { - timeout = timespec_add (xclock_now (CLOCK_REALTIME), + timeout = timespec_add (xclock_now (clockid_for_get), make_timespec (0, 200000000)); - val = pthread_timedjoin_np (th, &status, &timeout); + if (clockid == CLOCK_USE_TIMEDJOIN) + val = pthread_timedjoin_np (th, &status, &timeout); + else + val = pthread_clockjoin_np (th, &status, clockid, &timeout); if (val == 0) break; @@ -73,4 +87,13 @@ do_test (void) return 0; } +static int +do_test (void) +{ + do_test_clock (CLOCK_USE_TIMEDJOIN); + do_test_clock (CLOCK_REALTIME); + do_test_clock (CLOCK_MONOTONIC); + return 0; +} + #include <support/test-driver.c> |