spawn.signal_stress: reap spawned children on exit
Test: adb shell \
/data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static \
--gtest_filter=spawn.signal_stress
Bug: b/77824306
Change-Id: I970d1a4d0f8ac9621e676f32f838fc2f638d9750
diff --git a/tests/spawn_test.cpp b/tests/spawn_test.cpp
index 7e45ec3..a5e7e56 100644
--- a/tests/spawn_test.cpp
+++ b/tests/spawn_test.cpp
@@ -463,10 +463,19 @@
// because our sigset_t was too small.
ScopedSignalHandler ssh(SIGRTMIN, [](int) { ASSERT_EQ(getpid(), parent); });
+ const size_t pid_count = 128;
+ pid_t spawned_pids[pid_count];
+
ExecTestHelper eth;
eth.SetArgs({"true", nullptr});
- for (size_t i = 0; i < 128; ++i) {
- posix_spawn(nullptr, "true", nullptr, attrs[i % 3], eth.GetArgs(), nullptr);
+ for (size_t i = 0; i < pid_count; ++i) {
+ pid_t spawned_pid;
+ ASSERT_EQ(0, posix_spawn(&spawned_pid, "true", nullptr, attrs[i % 3], eth.GetArgs(), nullptr));
+ spawned_pids[i] = spawned_pid;
+ }
+
+ for (pid_t spawned_pid : spawned_pids) {
+ ASSERT_EQ(spawned_pid, TEMP_FAILURE_RETRY(waitpid(spawned_pid, nullptr, 0)));
}
AssertChildExited(pid, 99);