Skip to content

Commit

Permalink
[scudo] Reduce the scope of AllocAfterFork
Browse files Browse the repository at this point in the history
`ScudoWrappersCppTest.AllocAfterFork` was failing obscurely sometimes.
Someone pointed us to Linux's `vm.max_map_count` that can be
significantly lower on some machines than others. It turned out that
on a machine with that setting set to 65530, some `ENOMEM` errors
would occur with `mmap` & `mprotect` during that specific test.

Reducing the number of times we fork, and the maximum size allocated
during that test makes it pass on those machines.

Differential Revision: https://reviews.llvm.org/D111342
  • Loading branch information
Kostya Kortchinsky committed Oct 7, 2021
1 parent 9f93f2b commit 6727832
Showing 1 changed file with 3 additions and 7 deletions.
10 changes: 3 additions & 7 deletions compiler-rt/lib/scudo/standalone/tests/wrappers_cpp_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,6 @@ TEST(ScudoWrappersCppTest, ThreadedNew) {
}

#if !SCUDO_FUCHSIA
// TODO(kostyak): for me, this test fails in a specific configuration when ran
// by itself with some Scudo or GWP-ASan violation. Other people
// can't seem to reproduce the failure. Consider skipping this in
// the event it fails on the upstream bots.
TEST(ScudoWrappersCppTest, AllocAfterFork) {
std::atomic_bool Stop;

Expand All @@ -142,7 +138,7 @@ TEST(ScudoWrappersCppTest, AllocAfterFork) {
for (size_t N = 0; N < 5; N++) {
std::thread *T = new std::thread([&Stop] {
while (!Stop) {
for (size_t SizeLog = 3; SizeLog <= 21; SizeLog++) {
for (size_t SizeLog = 3; SizeLog <= 20; SizeLog++) {
char *P = new char[1UL << SizeLog];
EXPECT_NE(P, nullptr);
// Make sure this value is not optimized away.
Expand All @@ -155,10 +151,10 @@ TEST(ScudoWrappersCppTest, AllocAfterFork) {
}

// Create a thread to fork and allocate.
for (size_t N = 0; N < 100; N++) {
for (size_t N = 0; N < 50; N++) {
pid_t Pid;
if ((Pid = fork()) == 0) {
for (size_t SizeLog = 3; SizeLog <= 21; SizeLog++) {
for (size_t SizeLog = 3; SizeLog <= 20; SizeLog++) {
char *P = new char[1UL << SizeLog];
EXPECT_NE(P, nullptr);
// Make sure this value is not optimized away.
Expand Down

0 comments on commit 6727832

Please sign in to comment.