diff options
Diffstat (limited to 'nptl/tst-mutex9.c')
-rw-r--r-- | nptl/tst-mutex9.c | 131 |
1 files changed, 27 insertions, 104 deletions
diff --git a/nptl/tst-mutex9.c b/nptl/tst-mutex9.c index 917276e380..e9fd8e2859 100644 --- a/nptl/tst-mutex9.c +++ b/nptl/tst-mutex9.c @@ -26,6 +26,9 @@ #include <sys/mman.h> #include <sys/time.h> #include <sys/wait.h> +#include <support/check.h> +#include <support/timespec.h> +#include <support/xunistd.h> static int @@ -42,10 +45,7 @@ do_test (void) fd = mkstemp (tmpfname); if (fd == -1) - { - printf ("cannot open temporary file: %m\n"); - return 1; - } + FAIL_EXIT1 ("cannot open temporary file: %m\n"); /* Make sure it is always removed. */ unlink (tmpfname); @@ -54,46 +54,21 @@ do_test (void) memset (data, '\0', ps); /* Write the data to the file. */ - if (write (fd, data, ps) != (ssize_t) ps) - { - puts ("short write"); - return 1; - } + xwrite (fd, data, ps); - mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (mem == MAP_FAILED) - { - printf ("mmap failed: %m\n"); - return 1; - } + mem = xmmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd); m = (pthread_mutex_t *) (((uintptr_t) mem + __alignof (pthread_mutex_t)) & ~(__alignof (pthread_mutex_t) - 1)); - if (pthread_mutexattr_init (&a) != 0) - { - puts ("mutexattr_init failed"); - return 1; - } + TEST_COMPARE (pthread_mutexattr_init (&a), 0); - if (pthread_mutexattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0) - { - puts ("mutexattr_setpshared failed"); - return 1; - } + TEST_COMPARE (pthread_mutexattr_setpshared (&a, PTHREAD_PROCESS_SHARED), 0); - if (pthread_mutexattr_settype (&a, PTHREAD_MUTEX_RECURSIVE) != 0) - { - puts ("mutexattr_settype failed"); - return 1; - } + TEST_COMPARE (pthread_mutexattr_settype (&a, PTHREAD_MUTEX_RECURSIVE), 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 int e; @@ -101,70 +76,29 @@ do_test (void) { #ifdef ENABLE_PI if (e == ENOTSUP) - { - puts ("PI mutexes unsupported"); - return 0; - } + FAIL_UNSUPPORTED ("PI mutexes unsupported"); #endif - puts ("mutex_init failed"); - return 1; + FAIL_EXIT1 ("mutex_init failed"); } - if (pthread_mutex_lock (m) != 0) - { - puts ("mutex_lock failed"); - return 1; - } + TEST_COMPARE (pthread_mutex_lock (m), 0); - if (pthread_mutexattr_destroy (&a) != 0) - { - puts ("mutexattr_destroy failed"); - return 1; - } + TEST_COMPARE (pthread_mutexattr_destroy (&a), 0); puts ("going to fork now"); - pid = fork (); - if (pid == -1) - { - puts ("fork failed"); - return 1; - } - else if (pid == 0) + pid = xfork (); + if (pid == 0) { if (pthread_mutex_trylock (m) == 0) - { - puts ("child: mutex_trylock succeeded"); - exit (1); - } + FAIL_EXIT1 ("child: mutex_trylock succeeded"); if (pthread_mutex_unlock (m) == 0) - { - puts ("child: mutex_unlock succeeded"); - exit (1); - } - - struct timeval tv; - gettimeofday (&tv, NULL); - struct timespec ts; - TIMEVAL_TO_TIMESPEC (&tv, &ts); - ts.tv_nsec += 500000000; - if (ts.tv_nsec >= 1000000000) - { - ++ts.tv_sec; - ts.tv_nsec -= 1000000000; - } - - e = pthread_mutex_timedlock (m, &ts); - if (e == 0) - { - puts ("child: mutex_timedlock succeeded"); - exit (1); - } - if (e != ETIMEDOUT) - { - puts ("child: mutex_timedlock didn't time out"); - exit (1); - } + FAIL_EXIT1 ("child: mutex_unlock succeeded"); + + const struct timespec ts = timespec_add (xclock_now (CLOCK_REALTIME), + make_timespec (0, 500000000)); + + TEST_COMPARE (pthread_mutex_timedlock (m, &ts), ETIMEDOUT); alarm (1); @@ -179,23 +113,12 @@ do_test (void) int status; if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid) - { - puts ("waitpid failed"); - return 1; - } + FAIL_EXIT1 ("waitpid failed"); if (! WIFSIGNALED (status)) - { - puts ("child not killed by signal"); - return 1; - } - if (WTERMSIG (status) != SIGALRM) - { - puts ("child not killed by SIGALRM"); - return 1; - } + FAIL_EXIT1 ("child not killed by signal"); + TEST_COMPARE (WTERMSIG (status), SIGALRM); return 0; } -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" +#include <support/test-driver.c> |