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