about summary refs log tree commit diff
path: root/nptl/tst-join3.c
diff options
context:
space:
mode:
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>