From 447c70a5dc04e85f96c2ae477ce851fdfdd8c719 Mon Sep 17 00:00:00 2001 From: Salvatore Cro Date: Fri, 10 Sep 2010 10:55:43 +0200 Subject: tests: Added new nptl tests tests: Added several nptl tests from glibc 2.10.1 Signed-off-by: Salvatore Cro Signed-off-by: Carmelo Amoroso --- test/nptl/tst-tsd6.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 test/nptl/tst-tsd6.c (limited to 'test/nptl/tst-tsd6.c') diff --git a/test/nptl/tst-tsd6.c b/test/nptl/tst-tsd6.c new file mode 100644 index 000000000..debb1dd36 --- /dev/null +++ b/test/nptl/tst-tsd6.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include + +#define NKEYS 100 +static pthread_key_t keys[NKEYS]; +static pthread_barrier_t b; + + +static void * +tf (void *arg) +{ + void *res = NULL; + for (int i = 0; i < NKEYS; ++i) + { + void *p = pthread_getspecific (keys[i]); + pthread_setspecific (keys[i], (void *) 7); + if (p != NULL) + res = p; + } + if (arg != NULL) + { + pthread_barrier_wait (arg); + pthread_barrier_wait (arg); + } + return res; +} + + +static int +do_test (void) +{ + pthread_barrier_init (&b, NULL, 2); + + for (int i = 0; i < NKEYS; ++i) + if (pthread_key_create (&keys[i], NULL) != 0) + { + puts ("cannot create keys"); + return 1; + } + + pthread_t th; + if (pthread_create (&th, NULL, tf, &b) != 0) + { + puts ("cannot create thread in parent"); + return 1; + } + + pthread_barrier_wait (&b); + + pid_t pid = fork (); + if (pid == 0) + { + if (pthread_create (&th, NULL, tf, NULL) != 0) + { + puts ("cannot create thread in child"); + exit (1); + } + + void *res; + pthread_join (th, &res); + + exit (res != NULL); + } + else if (pid == -1) + { + puts ("cannot create child process"); + return 1; + } + + int s; + if (TEMP_FAILURE_RETRY (waitpid (pid, &s, 0)) != pid) + { + puts ("failing to wait for child process"); + return 1; + } + + pthread_barrier_wait (&b); + pthread_join (th, NULL); + + return !WIFEXITED (s) ? 2 : WEXITSTATUS (s); +} + + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" -- cgit v1.2.3