aboutsummaryrefslogtreecommitdiff
path: root/nptl/tst-mutex5.c
diff options
context:
space:
mode:
authorMike Crowe <mac@mcrowe.com>2019-06-19 18:07:58 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-06-21 09:59:50 -0300
commitce5b73a7c3d8caefc72ac3b95490861e3ee13520 (patch)
treee6b816726b34c77c1b9569cacbb824dc4c960f94 /nptl/tst-mutex5.c
parent8bf225d5832eda8fefce9361c53cb68a55150b96 (diff)
downloadglibc-ce5b73a7c3d8caefc72ac3b95490861e3ee13520.tar
glibc-ce5b73a7c3d8caefc72ac3b95490861e3ee13520.tar.gz
glibc-ce5b73a7c3d8caefc72ac3b95490861e3ee13520.tar.bz2
glibc-ce5b73a7c3d8caefc72ac3b95490861e3ee13520.zip
nptl: Convert various tests to use libsupport
* nptl/eintr.c: Use libsupport. * nptl/tst-eintr1.c: Likewise. * nptl/tst-eintr2.c: Likewise. * nptl/tst-eintr3.c: Likewise. * nptl/tst-eintr4.c: Likewise. * nptl/tst-eintr5.c: Likewise. * nptl/tst-mutex-errorcheck.c: Likewise. * nptl/tst-mutex5.c: Likewise.
Diffstat (limited to 'nptl/tst-mutex5.c')
-rw-r--r--nptl/tst-mutex5.c164
1 files changed, 29 insertions, 135 deletions
diff --git a/nptl/tst-mutex5.c b/nptl/tst-mutex5.c
index 4e1d93b3e1..fb27152ecc 100644
--- a/nptl/tst-mutex5.c
+++ b/nptl/tst-mutex5.c
@@ -24,6 +24,8 @@
#include <sys/time.h>
#include <stdint.h>
#include <config.h>
+#include <support/check.h>
+#include <support/timespec.h>
#ifndef TYPE
@@ -35,168 +37,60 @@ static int
do_test (void)
{
pthread_mutex_t m;
- struct timespec ts;
- struct timeval tv;
- struct timeval tv2;
- int err;
pthread_mutexattr_t a;
- if (pthread_mutexattr_init (&a) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_settype (&a, TYPE) != 0)
- {
- puts ("mutexattr_settype failed");
- return 1;
- }
+ TEST_COMPARE (pthread_mutexattr_init (&a), 0);
+ TEST_COMPARE (pthread_mutexattr_settype (&a, TYPE), 0);
#ifdef ENABLE_PI
- if (pthread_mutexattr_setprotocol (&a, PTHREAD_PRIO_INHERIT) != 0)
- {
- puts ("pthread_mutexattr_setprotocol failed");
- return 1;
- }
+ TEST_COMPARE (pthread_mutexattr_setprotocol (&a, PTHREAD_PRIO_INHERIT), 0);
#endif
- err = pthread_mutex_init (&m, &a);
+ int err = pthread_mutex_init (&m, &a);
if (err != 0)
{
#ifdef ENABLE_PI
if (err == ENOTSUP)
- {
- puts ("PI mutexes unsupported");
- return 0;
- }
+ FAIL_UNSUPPORTED ("PI mutexes unsupported");
#endif
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_destroy (&a) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
+ FAIL_EXIT1 ("mutex_init failed");
}
+ TEST_COMPARE (pthread_mutexattr_destroy (&a), 0);
+ TEST_COMPARE (pthread_mutex_lock (&m), 0);
if (pthread_mutex_trylock (&m) == 0)
- {
- puts ("mutex_trylock succeeded");
- return 1;
- }
+ FAIL_EXIT1 ("mutex_trylock succeeded");
- gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ts.tv_sec += 2; /* Wait 2 seconds. */
-
- err = pthread_mutex_timedlock (&m, &ts);
- if (err == 0)
- {
- puts ("timedlock succeeded");
- return 1;
- }
- else if (err != ETIMEDOUT)
- {
- printf ("timedlock error != ETIMEDOUT: %d\n", err);
- return 1;
- }
- else
- {
- int clk_tck = sysconf (_SC_CLK_TCK);
-
- gettimeofday (&tv2, NULL);
-
- tv2.tv_sec -= tv.tv_sec;
- tv2.tv_usec -= tv.tv_usec;
- if (tv2.tv_usec < 0)
- {
- tv2.tv_usec += 1000000;
- tv2.tv_sec -= 1;
- }
-
- /* Be a bit tolerant, add one CLK_TCK. */
- tv2.tv_usec += 1000000 / clk_tck;
- if (tv2.tv_usec >= 1000000)
- {
- tv2.tv_usec -= 1000000;
- ++tv2.tv_sec;
- }
-
- if (tv2.tv_sec < 2)
- {
- printf ("premature timeout: %jd.%06jd difference\n",
- (intmax_t) tv2.tv_sec, (intmax_t) tv2.tv_usec);
- return 1;
- }
- }
+ /* Wait 2 seconds. */
+ struct timespec ts_timeout = timespec_add (xclock_now (CLOCK_REALTIME),
+ make_timespec (2, 0));
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
+ TEST_COMPARE (pthread_mutex_timedlock (&m, &ts_timeout), ETIMEDOUT);
+ TEST_TIMESPEC_BEFORE_NOW (ts_timeout, CLOCK_REALTIME);
- ts.tv_sec += 2; /* Wait 2 seconds. */
/* The following makes the ts value invalid. */
- ts.tv_nsec += 1000000000;
+ ts_timeout.tv_nsec += 1000000000;
- err = pthread_mutex_timedlock (&m, &ts);
- if (err == 0)
- {
- puts ("2nd timedlock succeeded");
- return 1;
- }
- else if (err != EINVAL)
- {
- printf ("2nd timedlock error != EINVAL: %d\n", err);
- return 1;
- }
+ TEST_COMPARE (pthread_mutex_timedlock (&m, &ts_timeout), EINVAL);
+ TEST_COMPARE (pthread_mutex_unlock (&m), 0);
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
+ const struct timespec ts_start = xclock_now (CLOCK_REALTIME);
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
+ /* Wait 2 seconds. */
+ ts_timeout = timespec_add (ts_start, make_timespec (2, 0));
- ts.tv_sec += 2; /* Wait 2 seconds. */
- if (pthread_mutex_timedlock (&m, &ts) != 0)
- {
- puts ("3rd timedlock failed");
- }
+ TEST_COMPARE (pthread_mutex_timedlock (&m, &ts_timeout), 0);
- (void) gettimeofday (&tv2, NULL);
+ const struct timespec ts_end = xclock_now (CLOCK_REALTIME);
/* Check that timedlock didn't delay. We use a limit of 0.1 secs. */
- timersub (&tv2, &tv, &tv2);
- if (tv2.tv_sec > 0 || tv2.tv_usec > 100000)
- {
- puts ("3rd timedlock didn't return right away");
- return 1;
- }
+ TEST_TIMESPEC_BEFORE (ts_end,
+ timespec_add (ts_start, make_timespec (0, 100000000)));
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("final mutex_unlock failed");
- return 1;
- }
-
- if (pthread_mutex_destroy (&m) != 0)
- {
- puts ("mutex_destroy failed");
- return 1;
- }
+ TEST_COMPARE (pthread_mutex_unlock (&m), 0);
+ TEST_COMPARE (pthread_mutex_destroy (&m), 0);
return 0;
}
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>