From 27a9aed81978af792cb06035a1619c8141a5fb5b Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 4 Sep 2014 16:09:25 -0700 Subject: [PATCH] Fix pthread_attr_getstack__main_thread. There were two problems here: * This would fail when run with unlimited stack, because it didn't know that bionic reports unlimited stacks as 8MiB. * This would leave RLIMIT_STACK small, causing failures to exec (so the popen and system tests would fail). Change-Id: I5b92dc64ca089400223b2d9a3743e9b9d57c1bc2 --- tests/pthread_test.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index bbac7fe95..9a9e515a2 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -27,6 +27,7 @@ #include #include +#include "private/ScopeGuard.h" #include "ScopedSignalHandler.h" TEST(pthread, pthread_key_create) { @@ -862,8 +863,19 @@ TEST(pthread, pthread_attr_getstack__main_thread) { // The stack size should correspond to RLIMIT_STACK. rlimit rl; ASSERT_EQ(0, getrlimit(RLIMIT_STACK, &rl)); + uint64_t original_rlim_cur = rl.rlim_cur; +#if defined(__BIONIC__) + if (rl.rlim_cur == RLIM_INFINITY) { + rl.rlim_cur = 8 * 1024 * 1024; // Bionic reports unlimited stacks as 8MiB. + } +#endif EXPECT_EQ(rl.rlim_cur, stack_size); + auto guard = create_scope_guard([&rl, original_rlim_cur]() { + rl.rlim_cur = original_rlim_cur; + ASSERT_EQ(0, setrlimit(RLIMIT_STACK, &rl)); + }); + // The high address of the /proc/self/maps [stack] region should equal stack_base + stack_size. // Remember that the stack grows down (and is mapped in on demand), so the low address of the // region isn't very interesting.