testcases: Attempt to integrate POSIX IPC tests to dfregress(8)
[dragonfly.git] / test / testcases / posixipc / timedwait_locked / timedwait_locked.c
1 #include <common.h>
2
3 int
4 main(void) {
5         sem_t *id;
6         u_int elapsed;
7         pid_t pid;
8
9         id = construct_shared_unnamed_sem(0);
10         if (id == SEM_FAILED) {
11                 fprintf(stderr, "construct sem\n");
12                 return 1;
13         }
14
15         pid = fork();
16         switch (pid) {
17         case -1:
18                 /* Error. */
19                 perror("fork");
20                 destruct_shared_unnamed_sem(id);
21                 return 1;
22         case 0:
23                 /* Child. */
24                 sleep(1);
25                 sem_post(id);
26                 exit(0);
27         }
28
29         if (timedwait(id, 2000, &elapsed, 0) < 0) {
30                 destruct_shared_unnamed_sem(id);
31                 return 1;
32         }
33         if (!ELAPSED(elapsed, 1000)) {
34                 fprintf(stderr, "sem_timedwait() with delayed post took %ums "
35                     "instead of 1000ms", elapsed);
36                 destruct_shared_unnamed_sem(id);
37                 return 1;
38         }
39
40         destruct_shared_unnamed_sem(id);
41
42         return 0;
43 }