1 #include <common.h> 2 3 int 4 main(void) { 5 sem_t *id; 6 int retval = 0; 7 int stat; 8 9 id = sem_open(TEST_PATH, O_CREAT, 0777, 0); 10 if (id == SEM_FAILED) { 11 perror("sem_open"); 12 return 1; 13 } 14 15 if (schedule_post(id, 500) < 0) { 16 sem_close(id); 17 sem_unlink(TEST_PATH); 18 return 1; 19 } 20 21 if (child_worker(wait_twoproc_child, NULL, &stat) < 0) { 22 check_alarm(1); 23 sem_close(id); 24 sem_unlink(TEST_PATH); 25 return 1; 26 } 27 28 errno = CSTAT_ERROR(stat); 29 switch (CSTAT_CLASS(stat)) { 30 case 0: 31 /* Pass! */ 32 retval = 0; 33 break; 34 case 1: 35 perror("child sem_open()"); 36 retval = 1; 37 break; 38 case 2: 39 perror("child sem_wait()"); 40 retval = 1; 41 break; 42 case 3: 43 perror("child sem_close()"); 44 retval = 1; 45 break; 46 default: 47 fprintf(stderr, "bad child state %#x", stat); 48 retval = 1; 49 break; 50 } 51 52 check_alarm(1); 53 sem_close(id); 54 sem_unlink(TEST_PATH); 55 56 return retval; 57 } 58