Use __NR_exit_group in MinidumpWriterTest.MinidumpStacksSkippedIfRequested.

Also adds waits for all child processes spawned in MinidumpWriterTest.

Bug: 725754
Change-Id: I3248925993dede2c113ab1989b322a9d9c8f24bd
Reviewed-on: https://chromium-review.googlesource.com/513480
Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
John Budorick 2017-05-24 08:51:53 -07:00 committed by Mark Mentovai
parent ffe3e47865
commit 16f5b5f512

View file

@ -70,7 +70,7 @@ TEST(MinidumpWriterTest, SetupWithPath) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -87,6 +87,7 @@ TEST(MinidumpWriterTest, SetupWithPath) {
ASSERT_GT(st.st_size, 0); ASSERT_GT(st.st_size, 0);
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
TEST(MinidumpWriterTest, SetupWithFD) { TEST(MinidumpWriterTest, SetupWithFD) {
@ -99,7 +100,7 @@ TEST(MinidumpWriterTest, SetupWithFD) {
char b; char b;
HANDLE_EINTR(read(fds[0], &b, sizeof(b))); HANDLE_EINTR(read(fds[0], &b, sizeof(b)));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -117,6 +118,7 @@ TEST(MinidumpWriterTest, SetupWithFD) {
ASSERT_GT(st.st_size, 0); ASSERT_GT(st.st_size, 0);
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that mapping info can be specified when writing a minidump, // Test that mapping info can be specified when writing a minidump,
@ -152,7 +154,7 @@ TEST(MinidumpWriterTest, MappingInfo) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -213,6 +215,7 @@ TEST(MinidumpWriterTest, MappingInfo) {
EXPECT_TRUE(minidump.SeekToStreamType(MD_LINUX_DSO_DEBUG, &len)); EXPECT_TRUE(minidump.SeekToStreamType(MD_LINUX_DSO_DEBUG, &len));
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that minidumping is skipped while writing minidumps if principal mapping // Test that minidumping is skipped while writing minidumps if principal mapping
@ -227,7 +230,7 @@ TEST(MinidumpWriterTest, MinidumpSkippedIfRequested) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -245,6 +248,7 @@ TEST(MinidumpWriterTest, MinidumpSkippedIfRequested) {
true, static_cast<uintptr_t>(0x0102030405060708ull), true, static_cast<uintptr_t>(0x0102030405060708ull),
false)); false));
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that minidumping is skipped while writing minidumps if principal mapping // Test that minidumping is skipped while writing minidumps if principal mapping
@ -271,7 +275,7 @@ TEST(MinidumpWriterTest, MinidumpStacksSkippedIfRequested) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -304,6 +308,7 @@ TEST(MinidumpWriterTest, MinidumpStacksSkippedIfRequested) {
} }
ASSERT_EQ(1, threads_with_stacks); ASSERT_EQ(1, threads_with_stacks);
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that stacks can be sanitized while writing minidumps. // Test that stacks can be sanitized while writing minidumps.
@ -317,7 +322,7 @@ TEST(MinidumpWriterTest, StacksAreSanitizedIfRequested) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -353,6 +358,7 @@ TEST(MinidumpWriterTest, StacksAreSanitizedIfRequested) {
ASSERT_TRUE(memmem(data, sz, &defaced, sizeof(defaced)) != nullptr); ASSERT_TRUE(memmem(data, sz, &defaced, sizeof(defaced)) != nullptr);
} }
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that a binary with a longer-than-usual build id note // Test that a binary with a longer-than-usual build id note
@ -369,7 +375,7 @@ TEST(MinidumpWriterTest, BuildIDLong) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -400,6 +406,8 @@ TEST(MinidumpWriterTest, BuildIDLong) {
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"; "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f";
EXPECT_EQ(module_identifier, module->debug_identifier()); EXPECT_EQ(module_identifier, module->debug_identifier());
EXPECT_EQ(build_id, module->code_identifier()); EXPECT_EQ(build_id, module->code_identifier());
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that mapping info can be specified, and that it overrides // Test that mapping info can be specified, and that it overrides
@ -448,7 +456,7 @@ TEST(MinidumpWriterTest, MappingInfoContained) {
char b; char b;
IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b))));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -494,6 +502,7 @@ TEST(MinidumpWriterTest, MappingInfoContained) {
EXPECT_EQ(module_identifier, module->debug_identifier()); EXPECT_EQ(module_identifier, module->debug_identifier());
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
TEST(MinidumpWriterTest, DeletedBinary) { TEST(MinidumpWriterTest, DeletedBinary) {
@ -585,6 +594,8 @@ TEST(MinidumpWriterTest, DeletedBinary) {
// which is always zero on Linux. // which is always zero on Linux.
module_identifier += "0"; module_identifier += "0";
EXPECT_EQ(module_identifier, module->debug_identifier()); EXPECT_EQ(module_identifier, module->debug_identifier());
IGNORE_EINTR(waitpid(child_pid, nullptr, 0));
} }
// Test that an additional memory region can be added to the minidump. // Test that an additional memory region can be added to the minidump.
@ -612,7 +623,7 @@ TEST(MinidumpWriterTest, AdditionalMemory) {
char b; char b;
HANDLE_EINTR(read(fds[0], &b, sizeof(b))); HANDLE_EINTR(read(fds[0], &b, sizeof(b)));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -657,6 +668,7 @@ TEST(MinidumpWriterTest, AdditionalMemory) {
delete[] memory; delete[] memory;
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that an invalid thread stack pointer still results in a minidump. // Test that an invalid thread stack pointer still results in a minidump.
@ -670,7 +682,7 @@ TEST(MinidumpWriterTest, InvalidStackPointer) {
char b; char b;
HANDLE_EINTR(read(fds[0], &b, sizeof(b))); HANDLE_EINTR(read(fds[0], &b, sizeof(b)));
close(fds[0]); close(fds[0]);
syscall(__NR_exit); syscall(__NR_exit_group);
} }
close(fds[0]); close(fds[0]);
@ -736,6 +748,7 @@ TEST(MinidumpWriterTest, InvalidStackPointer) {
#endif #endif
close(fds[1]); close(fds[1]);
IGNORE_EINTR(waitpid(child, nullptr, 0));
} }
// Test that limiting the size of the minidump works. // Test that limiting the size of the minidump works.
@ -910,6 +923,7 @@ TEST(MinidumpWriterTest, MinidumpSizeLimit) {
// Kill the helper program. // Kill the helper program.
kill(child_pid, SIGKILL); kill(child_pid, SIGKILL);
IGNORE_EINTR(waitpid(child_pid, nullptr, 0));
} }
} // namespace } // namespace