diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-11-10 07:54:40 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-11-10 07:54:40 +0000 |
commit | ed2ced8ae324a8a89a76ff3fc3971226b0107d3e (patch) | |
tree | 73b9742b4eddf42b5b446289837132b62552befd /nptl/tst-exit3.c | |
parent | 5429ff760a5544a34c5f05f16c01a7dffa505604 (diff) | |
download | glibc-ed2ced8ae324a8a89a76ff3fc3971226b0107d3e.zip glibc-ed2ced8ae324a8a89a76ff3fc3971226b0107d3e.tar.gz glibc-ed2ced8ae324a8a89a76ff3fc3971226b0107d3e.tar.bz2 |
2004-11-10 Jakub Jelinek <jakub@redhat.com>
* Makefile (tests): Add tst-exit3.
* tst-exit3.c: New test.
Diffstat (limited to 'nptl/tst-exit3.c')
-rw-r--r-- | nptl/tst-exit3.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/nptl/tst-exit3.c b/nptl/tst-exit3.c new file mode 100644 index 0000000..da92c82 --- /dev/null +++ b/nptl/tst-exit3.c @@ -0,0 +1,81 @@ +#include <pthread.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + + +static pthread_barrier_t b; + + +static void * +tf2 (void *arg) +{ + while (1) + sleep (100); + + /* NOTREACHED */ + return NULL; +} + + +static void * +tf (void *arg) +{ + pthread_t th; + + int e = pthread_barrier_wait (&b); + if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) + { + puts ("barrier_wait failed"); + exit (1); + } + + e = pthread_create (&th, NULL, tf2, NULL); + if (e != 0) + { + printf ("create failed: %s\n", strerror (e)); + exit (1); + } + + /* Terminate only this thread. */ + return NULL; +} + + +static int +do_test (void) +{ + pthread_t th; + + if (pthread_barrier_init (&b, NULL, 2) != 0) + { + puts ("barrier_init failed"); + exit (1); + } + + int e = pthread_create (&th, NULL, tf, NULL); + if (e != 0) + { + printf ("create failed: %s\n", strerror (e)); + exit (1); + } + + e = pthread_barrier_wait (&b); + if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) + { + puts ("barrier_wait failed"); + exit (1); + } + + /* Terminate only this thread. */ + pthread_exit (NULL); + + /* NOTREACHED */ + return 1; +} + +#define EXPECTED_SIGNAL SIGALRM +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |