diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-06-23 22:00:53 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-06-24 00:02:31 +0200 |
commit | 9f6e508b4270093607676361e68dfd7a0bf91492 (patch) | |
tree | 118f717487e9eca1420c98a50b9e01202fb8bd91 /nptl | |
parent | ae725e3f9cb4e1eb825ebe1d55241c98c2ea32f1 (diff) | |
download | glibc-9f6e508b4270093607676361e68dfd7a0bf91492.zip glibc-9f6e508b4270093607676361e68dfd7a0bf91492.tar.gz glibc-9f6e508b4270093607676361e68dfd7a0bf91492.tar.bz2 |
htl: Enable tst-cancel25 test
* nptl/tst-cancel25.c: Move to...
* sysdeps/pthread/tst-cancel25.c: ... here.
(tf2) Do not test for SIGCANCEL when it is not defined.
* nptl/Makefile: Move corresponding reference to...
* sysdeps/pthread/Makefile: ... here.
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/Makefile | 2 | ||||
-rw-r--r-- | nptl/tst-cancel25.c | 171 |
2 files changed, 1 insertions, 172 deletions
diff --git a/nptl/Makefile b/nptl/Makefile index 60483c1..24ebd07 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -307,7 +307,7 @@ tests-container = tst-pthread-getattr tests-internal := tst-robustpi8 tst-rwlock19 tst-rwlock20 \ tst-sem11 tst-sem12 tst-sem13 \ tst-barrier5 tst-signal7 tst-mutex8 tst-mutex8-static \ - tst-mutexpi8 tst-mutexpi8-static tst-cancel25 \ + tst-mutexpi8 tst-mutexpi8-static \ tst-setgetname \ xtests = tst-setuid1 tst-setuid1-static tst-setuid2 \ diff --git a/nptl/tst-cancel25.c b/nptl/tst-cancel25.c deleted file mode 100644 index c6e1c23..0000000 --- a/nptl/tst-cancel25.c +++ /dev/null @@ -1,171 +0,0 @@ -#include <pthread.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <internal-signals.h> - - -static pthread_barrier_t b; -static pthread_t th2; - - -static void * -tf2 (void *arg) -{ - sigset_t mask; - if (pthread_sigmask (SIG_SETMASK, NULL, &mask) != 0) - { - puts ("pthread_sigmask failed"); - exit (1); - } - if (sigismember (&mask, SIGCANCEL)) - { - puts ("SIGCANCEL blocked in new thread"); - exit (1); - } - - /* Sync with the main thread so that we do not test anything else. */ - int e = pthread_barrier_wait (&b); - if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) - { - puts ("barrier_wait failed"); - exit (1); - } - - while (1) - { - /* Just a cancelable call. */ - struct timespec ts = { 10000, 0 }; - nanosleep (&ts, 0); - } - - return NULL; -} - - -static void -unwhand (void *arg) -{ - if (pthread_create (&th2, NULL, tf2, NULL) != 0) - { - puts ("unwhand: create failed"); - exit (1); - } -} - - -static void * -tf (void *arg) -{ - pthread_cleanup_push (unwhand, NULL); - - /* Sync with the main thread so that we do not test anything else. */ - int e = pthread_barrier_wait (&b); - if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) - { - puts ("barrier_wait failed"); - exit (1); - } - - while (1) - { - /* Just a cancelable call. */ - struct timespec ts = { 10000, 0 }; - nanosleep (&ts, 0); - } - - pthread_cleanup_pop (0); - - return NULL; -} - - -static int -do_test (void) -{ - if (pthread_barrier_init (&b, NULL, 2) != 0) - { - puts ("barrier_init failed"); - return 1; - } - - pthread_t th1; - if (pthread_create (&th1, NULL, tf, NULL) != 0) - { - puts ("create failed"); - return 1; - } - - int e = pthread_barrier_wait (&b); - if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) - { - puts ("barrier_wait failed"); - return 1; - } - - /* Make sure tf1 enters nanosleep. */ - struct timespec ts = { 0, 500000000 }; - while (nanosleep (&ts, &ts) != 0) - ; - - if (pthread_cancel (th1) != 0) - { - puts ("1st cancel failed"); - return 1; - } - - void *res; - if (pthread_join (th1, &res) != 0) - { - puts ("1st join failed"); - return 1; - } - if (res != PTHREAD_CANCELED) - { - puts ("1st thread not canceled"); - return 1; - } - - e = pthread_barrier_wait (&b); - if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) - { - puts ("barrier_wait failed"); - return 1; - } - - /* Make sure tf2 enters nanosleep. */ - ts.tv_sec = 0; - ts.tv_nsec = 500000000; - while (nanosleep (&ts, &ts) != 0) - ; - - puts ("calling pthread_cancel the second time"); - if (pthread_cancel (th2) != 0) - { - puts ("2nd cancel failed"); - return 1; - } - - puts ("calling pthread_join the second time"); - if (pthread_join (th2, &res) != 0) - { - puts ("2nd join failed"); - return 1; - } - if (res != PTHREAD_CANCELED) - { - puts ("2nd thread not canceled"); - return 1; - } - - if (pthread_barrier_destroy (&b) != 0) - { - puts ("barrier_destroy failed"); - return 0; - } - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" |