OSDN Git Service

whitespace fixes
[uclinux-h8/uclibc-ng.git] / test / nptl / tst-atfork1.c
1 /* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
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 <stdio.h>
23 #include <stdlib.h>
24 #include <unistd.h>
25 #include <sys/wait.h>
26
27
28 static int val;
29
30
31 static void
32 prepare1 (void)
33 {
34   val *= 2;
35 }
36
37 static void
38 prepare2 (void)
39 {
40   ++val;
41 }
42
43 static void
44 parent1 (void)
45 {
46   val += 4;
47 }
48
49 static void
50 parent2 (void)
51 {
52   val *= 4;
53 }
54
55 static void
56 child1 (void)
57 {
58   val += 8;
59 }
60
61 static void
62 child2 (void)
63 {
64   val *= 8;
65 }
66
67
68 static int
69 do_test (void)
70 {
71   pid_t pid;
72   int status = 0;
73
74   if (pthread_atfork (prepare1, parent1, child1) != 0)
75     {
76       puts ("1st atfork failed");
77       exit (1);
78     }
79   if (pthread_atfork (prepare2, parent2, child2) != 0)
80     {
81       puts ("2nd atfork failed");
82       exit (1);
83     }
84
85   pid = fork ();
86   if (pid == -1)
87     {
88       puts ("fork failed");
89       exit (1);
90     }
91
92   if (pid != 0)
93     {
94       /* Parent.  */
95       if (val != 24)
96         {
97           printf ("expected val=%d, got %d\n", 24, val);
98           exit (1);
99         }
100
101       if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
102         {
103           puts ("waitpid failed");
104           exit (1);
105         }
106     }
107   else
108     {
109       /* Child.  */
110       if (val != 80)
111         {
112           printf ("expected val=%d, got %d\n", 80, val);
113           exit (2);
114         }
115     }
116
117   return status;
118 }
119
120 #define TEST_FUNCTION do_test ()
121 #include "../test-skeleton.c"