]> granicus.if.org Git - python/commitdiff
bpo-18049: Sync thread stack size to main thread size on macOS (GH-14748)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 1 Aug 2019 14:38:57 +0000 (07:38 -0700)
committerGitHub <noreply@github.com>
Thu, 1 Aug 2019 14:38:57 +0000 (07:38 -0700)
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 <ronaldoussoren@mac.com>
Lib/test/test_threading.py
Misc/NEWS.d/next/macOS/2019-07-13-15-58-18.bpo-18049.MklhQQ.rst [new file with mode: 0644]
Python/thread_pthread.h
configure
configure.ac

index 0a0a62bdf9bfaf65405d65b233577db697da3a63..ac4e7a7e0f53b3eefa9b08864444cfe626555114 100644 (file)
@@ -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 (file)
index 0000000..5af07cd
--- /dev/null
@@ -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.
index a36d16c19eade5e07d2678077bfdb914905e0809..994e35b2cc0803cc0c02bd3b42ff686a873802c9 100644 (file)
@@ -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
index cb5f130d38e051767c43664d913e3cfb7a7873eb..3cd9b8866c72469ee2e098a104e7369892870ea2 100755 (executable)
--- 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"
index b31ed242f1a819561c5d31498794c04b2f9ed853..a2088897fc139ebfd56e598fc2318fccd54b6bb9 100644 (file)
@@ -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"