Upload Tizen:Base source
[external/eglibc.git] / nptl / tst-eintr1.c
1 /* Copyright (C) 2003 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #include <errno.h>
21 #include <pthread.h>
22 #include <signal.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26
27 #include "eintr.c"
28
29
30 static void *
31 tf2 (void *arg)
32 {
33   return arg;
34 }
35
36
37 static void *
38 tf1 (void *arg)
39 {
40   while (1)
41     {
42       pthread_t th;
43
44       int e = pthread_create (&th, NULL, tf2, NULL);
45       if (e != 0)
46         {
47           if (e == EINTR)
48             {
49               puts ("pthread_create returned EINTR");
50               exit (1);
51             }
52
53           char buf[100];
54           printf ("tf1: pthread_create failed: %s\n",
55                   strerror_r (e, buf, sizeof (buf)));
56           exit (1);
57         }
58
59       e = pthread_join (th, NULL);
60       if (e != 0)
61         {
62           if (e == EINTR)
63             {
64               puts ("pthread_join returned EINTR");
65               exit (1);
66             }
67
68           char buf[100];
69           printf ("tf1: pthread_join failed: %s\n",
70                   strerror_r (e, buf, sizeof (buf)));
71           exit (1);
72         }
73     }
74 }
75
76
77 static int
78 do_test (void)
79 {
80   setup_eintr (SIGUSR1, NULL);
81
82   int i;
83   for (i = 0; i < 10; ++i)
84     {
85       pthread_t th;
86       int e = pthread_create (&th, NULL, tf1, NULL);
87       if (e != 0)
88         {
89           char buf[100];
90           printf ("main: pthread_create failed: %s\n",
91                   strerror_r (e, buf, sizeof (buf)));
92           exit (1);
93         }
94     }
95
96   (void) tf1 (NULL);
97   /* NOTREACHED */
98
99   return 0;
100 }
101
102 #define EXPECTED_SIGNAL SIGALRM
103 #define TIMEOUT 3
104 #define TEST_FUNCTION do_test ()
105 #include "../test-skeleton.c"