aboutsummaryrefslogtreecommitdiff
path: root/nptl/tst-join3.c
diff options
context:
space:
mode:
authorMike Crowe <mac@mcrowe.com>2019-10-31 10:03:21 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-11-01 11:23:43 -0300
commit69ca4b54c151cec42ccca5e05790efc1a8206b47 (patch)
treee239090413e1da5dbd3a9fc3ce54895da5624346 /nptl/tst-join3.c
parent893bbdd0072fbf96808e66af04b970e5b39171fb (diff)
downloadglibc-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.c33
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>