OSDN Git Service

h8300: O_DIRECT and O_DIRECTIRY swapping.
[uclinux-h8/uclibc-ng.git] / test / 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, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <errno.h>
20 #include <pthread.h>
21 #include <signal.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25
26 #include "eintr.c"
27
28
29 static void *
30 tf2 (void *arg)
31 {
32   return arg;
33 }
34
35
36 static void *
37 tf1 (void *arg)
38 {
39   while (1)
40     {
41       pthread_t th;
42
43       int e = pthread_create (&th, NULL, tf2, NULL);
44       if (e != 0)
45         {
46           if (e == EINTR)
47             {
48               puts ("pthread_create returned EINTR");
49               exit (1);
50             }
51
52           char buf[100];
53           printf ("tf1: pthread_create failed: %s\n",
54                   strerror_r (e, buf, sizeof (buf)));
55           exit (1);
56         }
57
58       e = pthread_join (th, NULL);
59       if (e != 0)
60         {
61           if (e == EINTR)
62             {
63               puts ("pthread_join returned EINTR");
64               exit (1);
65             }
66
67           char buf[100];
68           printf ("tf1: pthread_join failed: %s\n",
69                   strerror_r (e, buf, sizeof (buf)));
70           exit (1);
71         }
72     }
73 }
74
75
76 static int
77 do_test (void)
78 {
79   setup_eintr (SIGUSR1, NULL);
80
81   int i;
82   for (i = 0; i < 10; ++i)
83     {
84       pthread_t th;
85       int e = pthread_create (&th, NULL, tf1, NULL);
86       if (e != 0)
87         {
88           char buf[100];
89           printf ("main: pthread_create failed: %s\n",
90                   strerror_r (e, buf, sizeof (buf)));
91           exit (1);
92         }
93     }
94
95   (void) tf1 (NULL);
96   /* NOTREACHED */
97
98   return 0;
99 }
100
101 #define EXPECTED_SIGNAL SIGALRM
102 #define TIMEOUT 3
103 #define TEST_FUNCTION do_test ()
104 #include "../test-skeleton.c"