Date: Sat, 01 Aug 2026 12:19:29 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: a96f285b5953 - main - tests/sys/kern: adjust tests for the new reaping behavior Message-ID: <6a6de451.1dea0.25565c5e@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=a96f285b5953f6ff3adb3ab43433ba9e15a9aa46 commit a96f285b5953f6ff3adb3ab43433ba9e15a9aa46 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2026-07-29 05:29:21 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-08-01 10:42:01 +0000 tests/sys/kern: adjust tests for the new reaping behavior Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58530 --- tests/sys/kern/pdwait.c | 19 +++++++++++-------- tests/sys/kern/procdesc.c | 6 ++++-- tests/sys/kern/ptrace_test.c | 9 ++++----- tests/sys/kern/reaper.c | 1 + 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/tests/sys/kern/pdwait.c b/tests/sys/kern/pdwait.c index c7b2c40a87ba..92c8c1b2b3ca 100644 --- a/tests/sys/kern/pdwait.c +++ b/tests/sys/kern/pdwait.c @@ -216,8 +216,8 @@ ATF_TC_BODY(enotcap, tc) } /* - * Even though the process descriptor is still open, there is no more process - * to signal after pdwait() has returned. + * Zombie is reaped only after the last process descriptor closed. So + * the child still can be signalled after pdwait(). */ ATF_TC_WITHOUT_HEAD(pdkill_after_pdwait); ATF_TC_BODY(pdkill_after_pdwait, tc) @@ -226,7 +226,7 @@ ATF_TC_BODY(pdkill_after_pdwait, tc) pid_t pid; int r, status; - pid = pdfork(&fdp, 0); + pid = pdfork(&fdp, PD_NOWAITPID); if (pid == 0) _exit(42); ATF_REQUIRE_MSG(pid >= 0, "pdfork failed: %s", strerror(errno)); @@ -236,13 +236,13 @@ ATF_TC_BODY(pdkill_after_pdwait, tc) ATF_CHECK_EQ(r, 0); ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); - ATF_REQUIRE_ERRNO(ESRCH, pdkill(fdp, SIGTERM) < 0); + ATF_REQUIRE_EQ(pdkill(fdp, SIGTERM), 0); close(fdp); } /* - * Even though the process descriptor is still open, there is no more status to + * While the process descriptor is still open, there is still the status to * return after a pid-based wait() function has already returned it. */ ATF_TC_WITHOUT_HEAD(pdwait_after_waitpid); @@ -263,12 +263,13 @@ ATF_TC_BODY(pdwait_after_waitpid, tc) ATF_CHECK_EQ(pid, waited_pid); ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); - ATF_REQUIRE_ERRNO(ESRCH, pdwait(fdp, NULL, WEXITED, NULL, NULL) < 0); + ATF_REQUIRE_EQ(pdwait(fdp, &status, WEXITED, NULL, NULL), 0); + ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); close(fdp); } -/* Called twice, waitpid should return ESRCH the second time */ +/* Called twice, waitpid should work second time */ ATF_TC_WITHOUT_HEAD(twice); ATF_TC_BODY(twice, tc) { @@ -286,7 +287,9 @@ ATF_TC_BODY(twice, tc) ATF_CHECK_EQ(r, 0); ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); - ATF_REQUIRE_ERRNO(ESRCH, pdwait(fdp, NULL, WEXITED, NULL, NULL) < 0); + r = pdwait(fdp, &status, WEXITED, NULL, NULL); + ATF_CHECK_EQ(r, 0); + ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); close(fdp); } diff --git a/tests/sys/kern/procdesc.c b/tests/sys/kern/procdesc.c index 1feaef34e2cb..b78e903adb7c 100644 --- a/tests/sys/kern/procdesc.c +++ b/tests/sys/kern/procdesc.c @@ -547,8 +547,10 @@ ATF_TC_BODY(pdopenpid_pdwait_only_one, tc) "pdwait(fd1): %s", strerror(errno)); ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); - /* The second fd should no longer be able to collect. */ - ATF_REQUIRE_ERRNO(ESRCH, pdwait(fd2, &status, WEXITED, NULL, NULL) < 0); + /* The second fd should be able to collect as well. */ + ATF_REQUIRE_MSG(pdwait(fd2, &status, WEXITED, NULL, NULL) == 0, + "pdwait(fd2): %s", strerror(errno)); + ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); ATF_REQUIRE(close(fd1) == 0); ATF_REQUIRE(close(fd2) == 0); diff --git a/tests/sys/kern/ptrace_test.c b/tests/sys/kern/ptrace_test.c index 478e787d129b..be808a2286d9 100644 --- a/tests/sys/kern/ptrace_test.c +++ b/tests/sys/kern/ptrace_test.c @@ -4232,7 +4232,7 @@ ATF_TC_BODY(ptrace__proc_reparent, tc) pid_t traced, debuger, wpid; int pd, status; - traced = pdfork(&pd, 0); + traced = pdfork(&pd, PD_NOWAITPID); ATF_REQUIRE(traced >= 0); if (traced == 0) { raise(SIGSTOP); @@ -4305,12 +4305,11 @@ ATF_TC_BODY(ptrace__procdesc_wait_child, tc) ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1); /* - * If process was created by pdfork, the return code have to - * be collected through process descriptor. + * If process was created by pdfork but without PD_NOWAITPID, + * the return code is available for wait(). */ wpid = wait(&status); - REQUIRE_EQ(wpid, -1); - REQUIRE_EQ(errno, ECHILD); + REQUIRE_EQ(wpid, child); ATF_REQUIRE(close(pd) != -1); } diff --git a/tests/sys/kern/reaper.c b/tests/sys/kern/reaper.c index fb5eeb9b324b..0d3a9a4ba5cf 100644 --- a/tests/sys/kern/reaper.c +++ b/tests/sys/kern/reaper.c @@ -764,6 +764,7 @@ ATF_TC_BODY(reaper_pdfork, tc) ATF_REQUIRE_EQ(pid, child); r = WIFEXITED(status) ? WEXITSTATUS(status) : -1; ATF_REQUIRE_EQ(r, 0); + close(pd); r = procctl(P_PID, parent, PROC_REAP_STATUS, &st); ATF_REQUIRE_EQ(r, 0);home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a6de451.1dea0.25565c5e>
