]>
Commit | Line | Data |
---|---|---|
1 | #include <signal.h> | |
2 | #include <stdio.h> | |
3 | #include <stdlib.h> | |
4 | #include <unistd.h> | |
5 | #include <errno.h> | |
6 | ||
7 | #include <darwintest.h> | |
8 | ||
9 | T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true)); | |
10 | ||
11 | T_DECL(sigcontreturn, "checks that a call to waitid() for a child that is stopped and then continued returns correctly") | |
12 | { | |
13 | pid_t pid; | |
14 | siginfo_t siginfo; | |
15 | pid = fork(); | |
16 | T_QUIET; T_ASSERT_NE_INT(pid, -1, "fork() failed!"); | |
17 | ||
18 | if (pid == 0) { | |
19 | while (1) { | |
20 | } | |
21 | } | |
22 | ||
23 | kill(pid, SIGSTOP); | |
24 | kill(pid, SIGCONT); | |
25 | sleep(1); | |
26 | ||
27 | T_QUIET; T_ASSERT_POSIX_SUCCESS(waitid(P_PID, pid, &siginfo, WCONTINUED), "Calling waitid() failed for pid %d", pid); | |
28 | ||
29 | T_ASSERT_EQ_INT(siginfo.si_status, SIGCONT, "A call to waitid() for stopped and continued child returns 0x%x, expected SIGCONT (0x%x)", siginfo.si_status, SIGCONT ); | |
30 | kill(pid, SIGKILL); | |
31 | } |