blob: a83bf35dd204d3392c17869f6b161598c1a1ee0f [file] [log] [blame]
bart45bb8f62011-02-09 11:29:11 +00001/* 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
11static void *threadmain(void *dummy)
12{
13 sleep((unsigned long)dummy);
14 return NULL;
15}
16
17int 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}