| #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; |
| } |
| |
| |