]>
git.saurik.com Git - apple/xnu.git/blob - tests/freebsd_waitpid_nohang.c
2 * Copyright (c) 2016 Jilles Tjoelker
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 #include <sys/cdefs.h>
30 #include <darwintest.h>
34 T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true));
36 T_DECL(waitpid_nohang
, "FreeBSDarwin--waitpid_nohang")
43 T_ASSERT_POSIX_SUCCESS(child
, "child forked successfully");
50 pid
= waitpid(child
, &status
, WNOHANG
);
51 T_ASSERT_POSIX_ZERO(pid
, "waitpid call is successful");
52 T_EXPECT_EQ(status
, 42, "status is unaffected as expected");
54 r
= kill(child
, SIGTERM
);
55 T_ASSERT_POSIX_ZERO(r
, "signal sent successfully");
56 r
= waitid(P_PID
, (id_t
)child
, &siginfo
, WEXITED
| WNOWAIT
);
57 T_ASSERT_POSIX_SUCCESS(r
, "waitid call successful");
60 pid
= waitpid(child
, &status
, WNOHANG
);
61 T_ASSERT_EQ(pid
, child
, "waitpid returns correct pid");
62 T_EXPECT_EQ(WIFSIGNALED(status
), true, "child was signaled");
63 T_EXPECT_EQ(WTERMSIG(status
), SIGTERM
, "child was sent SIGTERM");