summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_threading.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-07-01 12:53:07 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-07-01 12:53:07 (GMT)
commit2555b0aac7020b870f23794de17d84c0a2cbf118 (patch)
treef9aedb50d12a16c9bda0ef0b4a25fd413e6155fb /Lib/test/test_threading.py
parent48b1ce5519623e83c5910453babef99ffdce3e23 (diff)
parent26d318690f37bd43ff843225075eeea633f7da8c (diff)
downloadcpython-2555b0aac7020b870f23794de17d84c0a2cbf118.zip
cpython-2555b0aac7020b870f23794de17d84c0a2cbf118.tar.gz
cpython-2555b0aac7020b870f23794de17d84c0a2cbf118.tar.bz2
(merge 3.2) Issue #11870: Skip test_threading.test_2_join_in_forked_process()
on platforms with known OS bugs Share the list of platforms with known OS bugs with other tests. Patch written by Charles-François Natali.
Diffstat (limited to 'Lib/test/test_threading.py')
-rw-r--r--Lib/test/test_threading.py25
1 files changed, 11 insertions, 14 deletions
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 2271f4e..da90e17 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -418,6 +418,13 @@ class ThreadTests(BaseTestCase):
class ThreadJoinOnShutdown(BaseTestCase):
+ # Between fork() and exec(), only async-safe functions are allowed (issues
+ # #12316 and #11870), and fork() from a worker thread is known to trigger
+ # problems with some operating systems (issue #3863): skip problematic tests
+ # on platforms known to behave badly.
+ platforms_to_skip = ('freebsd4', 'freebsd5', 'freebsd6', 'netbsd5',
+ 'os2emx')
+
def _run_and_join(self, script):
script = """if 1:
import sys, os, time, threading
@@ -448,6 +455,7 @@ class ThreadJoinOnShutdown(BaseTestCase):
self._run_and_join(script)
@unittest.skipUnless(hasattr(os, 'fork'), "needs os.fork()")
+ @unittest.skipIf(sys.platform in platforms_to_skip, "due to known OS bug")
def test_2_join_in_forked_process(self):
# Like the test above, but from a forked interpreter
script = """if 1:
@@ -464,15 +472,11 @@ class ThreadJoinOnShutdown(BaseTestCase):
self._run_and_join(script)
@unittest.skipUnless(hasattr(os, 'fork'), "needs os.fork()")
+ @unittest.skipIf(sys.platform in platforms_to_skip, "due to known OS bug")
def test_3_join_in_forked_from_thread(self):
# Like the test above, but fork() was called from a worker thread
# In the forked process, the main Thread object must be marked as stopped.
- # Skip platforms with known problems forking from a worker thread.
- # See http://bugs.python.org/issue3863.
- if sys.platform in ('freebsd4', 'freebsd5', 'freebsd6', 'netbsd5',
- 'os2emx'):
- raise unittest.SkipTest('due to known OS bugs on ' + sys.platform)
script = """if 1:
main_thread = threading.current_thread()
def worker():
@@ -498,15 +502,11 @@ class ThreadJoinOnShutdown(BaseTestCase):
self.assertEqual(data, expected_output)
@unittest.skipUnless(hasattr(os, 'fork'), "needs os.fork()")
+ @unittest.skipIf(sys.platform in platforms_to_skip, "due to known OS bug")
def test_4_joining_across_fork_in_worker_thread(self):
# There used to be a possible deadlock when forking from a child
# thread. See http://bugs.python.org/issue6643.
- # Skip platforms with known problems forking from a worker thread.
- # See http://bugs.python.org/issue3863.
- if sys.platform in ('freebsd4', 'freebsd5', 'freebsd6', 'os2emx'):
- raise unittest.SkipTest('due to known OS bugs on ' + sys.platform)
-
# The script takes the following steps:
# - The main thread in the parent process starts a new thread and then
# tries to join it.
@@ -575,6 +575,7 @@ class ThreadJoinOnShutdown(BaseTestCase):
self.assertScriptHasOutput(script, "end of main\n")
@unittest.skipUnless(hasattr(os, 'fork'), "needs os.fork()")
+ @unittest.skipIf(sys.platform in platforms_to_skip, "due to known OS bug")
def test_5_clear_waiter_locks_to_avoid_crash(self):
# Check that a spawned thread that forks doesn't segfault on certain
# platforms, namely OS X. This used to happen if there was a waiter
@@ -587,10 +588,6 @@ class ThreadJoinOnShutdown(BaseTestCase):
# lock will be acquired, we can't know if the internal mutex will be
# acquired at the time of the fork.
- # Skip platforms with known problems forking from a worker thread.
- # See http://bugs.python.org/issue3863.
- if sys.platform in ('freebsd4', 'freebsd5', 'freebsd6', 'os2emx'):
- raise unittest.SkipTest('due to known OS bugs on ' + sys.platform)
script = """if True:
import os, time, threading