From bc5cb1e6aaa5f50f7ec508c1f0c1d8a539da0fcd Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 6 Dec 2004 22:28:45 +0000 Subject: [PATCH] 2004-12-06 Roland McGrath * rt/tst-timer4.c (TEST_CLOCK, TEST_CLOCK_NANOSLEEP): New macros. Use them throughout in place of CLOCK_REALTIME and nanosleep. (do_test) [TEST_CLOCK_MISSING]: Call this macro and if it returns non-null, punt the test with a message using the string returned. * rt/tst-timer5.c: New file. * rt/Makefile (tests): Add it. --- rt/Makefile | 2 +- rt/tst-timer4.c | 39 ++++++++++++++++++++++++++------------- rt/tst-timer5.c | 14 ++++++++++++++ 3 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 rt/tst-timer5.c diff --git a/rt/Makefile b/rt/Makefile index 29e7f84..407cc99 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -45,7 +45,7 @@ tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \ tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \ tst-aio7 tst-mqueue1 tst-mqueue2 tst-mqueue3 tst-mqueue4 \ tst-mqueue5 tst-mqueue6 tst-mqueue7 tst-mqueue8 tst-mqueue9 \ - tst-timer3 tst-timer4 + tst-timer3 tst-timer4 tst-timer5 extra-libs := librt extra-libs-others := $(extra-libs) diff --git a/rt/tst-timer4.c b/rt/tst-timer4.c index bc5d14e..5bec011 100644 --- a/rt/tst-timer4.c +++ b/rt/tst-timer4.c @@ -27,6 +27,10 @@ #if _POSIX_THREADS # include +# ifndef TEST_CLOCK +# define TEST_CLOCK CLOCK_REALTIME +# endif + pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; @@ -40,7 +44,7 @@ static void thr1 (union sigval sigval) { pthread_mutex_lock (&lock); - thr1_err = clock_gettime (CLOCK_REALTIME, &thr1_ts); + thr1_err = clock_gettime (TEST_CLOCK, &thr1_ts); if (thr1_cnt >= 5) { struct itimerspec it = { }; @@ -86,7 +90,7 @@ thr2 (union sigval sigval) } } pthread_mutex_lock (&lock); - thr2_err = clock_gettime (CLOCK_REALTIME, &thr2_ts) | err; + thr2_err = clock_gettime (TEST_CLOCK, &thr2_ts) | err; if (thr2_cnt >= 5) { struct itimerspec it = { }; @@ -110,7 +114,7 @@ sig1_handler (int sig, siginfo_t *info, void *ctx) if (sig != SIGRTMIN) err |= 1 << 0; if (info->si_signo != SIGRTMIN) err |= 1 << 1; if (info->si_code != SI_TIMER) err |= 1 << 2; - if (clock_gettime (CLOCK_REALTIME, &sig1_ts) != 0) + if (clock_gettime (TEST_CLOCK, &sig1_ts) != 0) err |= 1 << 3; if (sig1_cnt >= 5) { @@ -134,7 +138,7 @@ sig2_handler (int sig, siginfo_t *info, void *ctx) if (sig != SIGRTMIN + 1) err |= 1 << 0; if (info->si_signo != SIGRTMIN + 1) err |= 1 << 1; if (info->si_code != SI_TIMER) err |= 1 << 2; - if (clock_gettime (CLOCK_REALTIME, &sig2_ts) != 0) + if (clock_gettime (TEST_CLOCK, &sig2_ts) != 0) err |= 1 << 3; if (sig2_cnt >= 5) { @@ -181,8 +185,17 @@ do_test (void) { int result = 0; +#ifdef TEST_CLOCK_MISSING + const char *missing = TEST_CLOCK_MISSING (TEST_CLOCK); + if (missing != NULL) + { + printf ("%s missing, skipping test\n", missing); + return 0; + } +#endif + struct timespec ts; - if (clock_gettime (CLOCK_REALTIME, &ts) != 0) + if (clock_gettime (TEST_CLOCK, &ts) != 0) { printf ("*** clock_gettime failed: %m\n"); result = 1; @@ -191,7 +204,7 @@ do_test (void) printf ("clock_gettime returned timespec = { %ld, %ld }\n", (long) ts.tv_sec, ts.tv_nsec); - if (clock_getres (CLOCK_REALTIME, &ts) != 0) + if (clock_getres (TEST_CLOCK, &ts) != 0) { printf ("*** clock_getres failed: %m\n"); result = 1; @@ -203,7 +216,7 @@ do_test (void) struct sigevent ev; memset (&ev, 0x11, sizeof (ev)); ev.sigev_notify = SIGEV_NONE; - if (timer_create (CLOCK_REALTIME, &ev, &timer_none) != 0) + if (timer_create (TEST_CLOCK, &ev, &timer_none) != 0) { printf ("*** timer_create for timer_none failed: %m\n"); return 1; @@ -220,7 +233,7 @@ do_test (void) ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = SIGRTMIN; ev.sigev_value.sival_ptr = &ev; - if (timer_create (CLOCK_REALTIME, &ev, &timer_sig1) != 0) + if (timer_create (TEST_CLOCK, &ev, &timer_sig1) != 0) { printf ("*** timer_create for timer_sig1 failed: %m\n"); return 1; @@ -230,7 +243,7 @@ do_test (void) ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = SIGRTMIN + 1; ev.sigev_value.sival_int = 163; - if (timer_create (CLOCK_REALTIME, &ev, &timer_sig2) != 0) + if (timer_create (TEST_CLOCK, &ev, &timer_sig2) != 0) { printf ("*** timer_create for timer_sig2 failed: %m\n"); return 1; @@ -241,7 +254,7 @@ do_test (void) ev.sigev_notify_function = thr1; ev.sigev_notify_attributes = NULL; ev.sigev_value.sival_ptr = &ev; - if (timer_create (CLOCK_REALTIME, &ev, &timer_thr1) != 0) + if (timer_create (TEST_CLOCK, &ev, &timer_thr1) != 0) { printf ("*** timer_create for timer_thr1 failed: %m\n"); return 1; @@ -260,7 +273,7 @@ do_test (void) ev.sigev_notify_function = thr2; ev.sigev_notify_attributes = &nattr; ev.sigev_value.sival_int = 111; - if (timer_create (CLOCK_REALTIME, &ev, &timer_thr2) != 0) + if (timer_create (TEST_CLOCK, &ev, &timer_thr2) != 0) { printf ("*** timer_create for timer_thr2 failed: %m\n"); return 1; @@ -330,7 +343,7 @@ do_test (void) #endif struct timespec startts; - if (clock_gettime (CLOCK_REALTIME, &startts) != 0) + if (clock_gettime (TEST_CLOCK, &startts) != 0) { printf ("*** clock_gettime failed: %m\n"); result = 1; @@ -482,7 +495,7 @@ do_test (void) result = 1; } - if (clock_gettime (CLOCK_REALTIME, &startts) != 0) + if (clock_gettime (TEST_CLOCK, &startts) != 0) { printf ("*** clock_gettime failed: %m\n"); result = 1; diff --git a/rt/tst-timer5.c b/rt/tst-timer5.c new file mode 100644 index 0000000..2683021 --- /dev/null +++ b/rt/tst-timer5.c @@ -0,0 +1,14 @@ +/* Timer test using the monotonic clock. */ + +#include +#include + +#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK +# define TEST_CLOCK CLOCK_MONOTONIC +# define TEST_CLOCK_MISSING(clock) \ + (sysconf (_SC_MONOTONIC_CLOCK) > 0 ? NULL : #clock) +# include "tst-timer4.c" +#else +# define TEST_FUNCTION 0 +# include "../test-skeleton.c" +#endif -- 2.7.4