#include <stdlib.h>
#include <sys/wait.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
static void *threadmain( void *dummy )
{
sleep( (unsigned long)dummy );
return NULL;
}
int main( int argc, char **argv )
{
int ctr;
pid_t childpid;
pthread_t childthread;
void *res;
int status;
pthread_create( &childthread, NULL, threadmain, (void *)2 );
childpid = fork();
switch( childpid ) {
case 0:
pthread_create( &childthread, NULL, threadmain, 0 );
pthread_join( childthread, &res );
exit(0);
break;
case -1:
perror( "FAILED: fork failed\n" );
break;
default:
break;
}
pthread_join( childthread, &res );
ctr = 0;
while(waitpid(childpid, &status, 0) != childpid) {
sleep(1);
ctr++;
if (ctr >= 10) {
printf("FAILED - timeout waiting for child\n");
return 0;
}
}
printf("PASS\n");
return 0;
}