diff options
Diffstat (limited to 'nptl/tst-sem13.c')
-rw-r--r-- | nptl/tst-sem13.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/nptl/tst-sem13.c b/nptl/tst-sem13.c index 28d37ed0cb..d7baa2ae58 100644 --- a/nptl/tst-sem13.c +++ b/nptl/tst-sem13.c @@ -6,9 +6,14 @@ #include <internaltypes.h> #include <support/check.h> +/* A bogus clock value that tells run_test to use sem_timedwait rather than + sem_clockwait. */ +#define CLOCK_USE_TIMEDWAIT (-1) -static int -do_test (void) +typedef int (*waitfn_t)(sem_t *, struct timespec *); + +static void +do_test_wait (waitfn_t waitfn, const char *fnname) { union { @@ -16,11 +21,13 @@ do_test (void) struct new_sem ns; } u; + printf ("do_test_wait: %s\n", fnname); + TEST_COMPARE (sem_init (&u.s, 0, 0), 0); struct timespec ts = { 0, 1000000001 }; /* Invalid. */ errno = 0; - TEST_VERIFY_EXIT (sem_timedwait (&u.s, &ts) < 0); + TEST_VERIFY_EXIT (waitfn (&u.s, &ts) < 0); TEST_COMPARE (errno, EINVAL); #if __HAVE_64B_ATOMICS @@ -33,7 +40,7 @@ do_test (void) ts.tv_sec = /* Invalid. */ -2; ts.tv_nsec = 0; errno = 0; - TEST_VERIFY_EXIT (sem_timedwait (&u.s, &ts) < 0); + TEST_VERIFY_EXIT (waitfn (&u.s, &ts) < 0); TEST_COMPARE (errno, ETIMEDOUT); #if __HAVE_64B_ATOMICS nwaiters = (u.ns.data >> SEM_NWAITERS_SHIFT); @@ -41,7 +48,31 @@ do_test (void) nwaiters = u.ns.nwaiters; #endif TEST_COMPARE (nwaiters, 0); +} +int test_sem_timedwait (sem_t *sem, struct timespec *ts) +{ + return sem_timedwait (sem, ts); +} + +int test_sem_clockwait_monotonic (sem_t *sem, struct timespec *ts) +{ + return sem_clockwait (sem, CLOCK_MONOTONIC, ts); +} + +int test_sem_clockwait_realtime (sem_t *sem, struct timespec *ts) +{ + return sem_clockwait (sem, CLOCK_REALTIME, ts); +} + +static int do_test (void) +{ + do_test_wait (&test_sem_timedwait, + "sem_timedwait"); + do_test_wait (&test_sem_clockwait_monotonic, + "sem_clockwait(monotonic)"); + do_test_wait (&test_sem_clockwait_realtime, + "sem_clockwait(realtime)"); return 0; } |