]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/drd/tests/threaded-fork.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / drd / tests / threaded-fork.c
1 /* fork a process that has created a detached thread. */
2
3 #include <stdlib.h>
4 #include <sys/wait.h>
5 #include <pthread.h>
6 #include <sys/types.h>
7 #include <unistd.h>
8 #include <stdio.h>
9 #include <signal.h>
10
11 static void *threadmain(void *dummy)
12 {
13         sleep((unsigned long)dummy);
14         return NULL;
15 }
16
17 int main(int argc, char **argv)
18 {
19         int ctr;
20         pid_t childpid;
21         pthread_t childthread;
22         void *res;
23         int status;
24
25         pthread_create(&childthread, NULL, threadmain, (void *)2);
26         pthread_detach(childthread);
27
28         childpid = fork();
29         switch (childpid) {
30         case 0:
31                 pthread_create(&childthread, NULL, threadmain, 0);
32                 pthread_join(childthread, &res);
33                 exit(0);
34                 break;
35         case -1:
36                 perror("FAILED: fork failed\n");
37                 break;
38         default:
39                 break;
40         }
41
42         ctr = 0;
43         while (waitpid(childpid, &status, 0) != childpid) {
44                 sleep(1);
45                 ctr++;
46                 if (ctr >= 10) {
47                   fprintf(stderr, "FAILED - timeout waiting for child\n");
48                   return 0;
49                 }
50         }
51
52         fprintf(stderr, "PASS\n");
53
54         return 0;
55 }