xref: /dragonfly/test/testcases/posixipc/wait_two_proc/wait_two_proc.c (revision 0bba68feaae2960c1f2b5feb6978a8918f571707)
1 #include <common.h>
2 
3 int
main(void)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