From 8399641c34d8136c3151fda6461cc4727a20b28e Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Thu, 1 Aug 2019 07:38:57 -0700 Subject: bpo-18049: Sync thread stack size to main thread size on macOS (GH-14748) This changeset increases the default size of the stack for threads on macOS to the size of the stack of the main thread and reenables the relevant recursion test. (cherry picked from commit 1a057bab0f18d6ad843ce321d1d77a4819497ae4) Co-authored-by: Ronald Oussoren --- Lib/test/test_threading.py | 2 -- Misc/NEWS.d/next/macOS/2019-07-13-15-58-18.bpo-18049.MklhQQ.rst | 3 +++ Python/thread_pthread.h | 3 ++- configure | 2 ++ configure.ac | 2 ++ 5 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2019-07-13-15-58-18.bpo-18049.MklhQQ.rst diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 0a0a62b..ac4e7a7 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1049,8 +1049,6 @@ class ThreadingExceptionTests(BaseTestCase): lock = threading.Lock() self.assertRaises(RuntimeError, lock.release) - @unittest.skipUnless(sys.platform == 'darwin' and test.support.python_is_optimized(), - 'test macosx problem') def test_recursion_limit(self): # Issue 9670 # test that excessive recursion within a non-main thread causes diff --git a/Misc/NEWS.d/next/macOS/2019-07-13-15-58-18.bpo-18049.MklhQQ.rst b/Misc/NEWS.d/next/macOS/2019-07-13-15-58-18.bpo-18049.MklhQQ.rst new file mode 100644 index 0000000..5af07cd --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2019-07-13-15-58-18.bpo-18049.MklhQQ.rst @@ -0,0 +1,3 @@ +Increase the default stack size of threads from 5MB to 16MB on macOS, to +match the stack size of the main thread. This avoids crashes on deep recursion +in threads. diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index a36d16c..994e35b 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -40,7 +40,8 @@ */ #if defined(__APPLE__) && defined(THREAD_STACK_SIZE) && THREAD_STACK_SIZE == 0 #undef THREAD_STACK_SIZE -#define THREAD_STACK_SIZE 0x500000 +/* Note: This matches the value of -Wl,-stack_size in configure.ac */ +#define THREAD_STACK_SIZE 0x1000000 #endif #if defined(__FreeBSD__) && defined(THREAD_STACK_SIZE) && THREAD_STACK_SIZE == 0 #undef THREAD_STACK_SIZE diff --git a/configure b/configure index cb5f130..3cd9b88 100755 --- a/configure +++ b/configure @@ -9542,6 +9542,8 @@ then # Issue #18075: the default maximum stack size (8MBytes) is too # small for the default recursion limit. Increase the stack size # to ensure that tests don't crash + # Note: This matches the value of THREAD_STACK_SIZE in + # thread_pthread.h LINKFORSHARED="-Wl,-stack_size,1000000 $LINKFORSHARED" if test "$enable_framework" diff --git a/configure.ac b/configure.ac index b31ed24..a208889 100644 --- a/configure.ac +++ b/configure.ac @@ -2694,6 +2694,8 @@ then # Issue #18075: the default maximum stack size (8MBytes) is too # small for the default recursion limit. Increase the stack size # to ensure that tests don't crash + # Note: This matches the value of THREAD_STACK_SIZE in + # thread_pthread.h LINKFORSHARED="-Wl,-stack_size,1000000 $LINKFORSHARED" if test "$enable_framework" -- cgit v0.12