1 #include <stdlib.h>
2 #include <sys/wait.h>
3 #include <pthread.h>
4 #include <sys/types.h>
5 #include <unistd.h>
6 #include <stdio.h>
7 #include <signal.h>
8
threadmain(void * dummy)9 static void *threadmain( void *dummy )
10 {
11 sleep( (unsigned long)dummy );
12 return NULL;
13 }
14
main(int argc,char ** argv)15 int main( int argc, char **argv )
16 {
17 int ctr;
18 pid_t childpid;
19 pthread_t childthread;
20 void *res;
21 int status;
22
23 pthread_create( &childthread, NULL, threadmain, (void *)2 );
24
25 childpid = fork();
26 switch( childpid ) {
27 case 0:
28 pthread_create( &childthread, NULL, threadmain, 0 );
29 pthread_join( childthread, &res );
30 exit(0);
31 break;
32 case -1:
33 perror( "FAILED: fork failed\n" );
34 break;
35 default:
36 break;
37 }
38
39 pthread_join( childthread, &res );
40 ctr = 0;
41 while(waitpid(childpid, &status, 0) != childpid) {
42 sleep(1);
43 ctr++;
44 if (ctr >= 10) {
45 printf("FAILED - timeout waiting for child\n");
46 return 0;
47 }
48 }
49
50 printf("PASS\n");
51
52 return 0;
53 }
54
55
56