diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-04-02 15:15:17 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-04-02 15:15:17 (GMT) |
commit | e900096dc42cd0d590752e00ba3983b4672da806 (patch) | |
tree | d8adc06a6312185ad155f4dea4e146e8447c42e8 /Lib | |
parent | b6af60c2a9e2625987bcdd6775eb9fe8834c9641 (diff) | |
download | cpython-e900096dc42cd0d590752e00ba3983b4672da806.zip cpython-e900096dc42cd0d590752e00ba3983b4672da806.tar.gz cpython-e900096dc42cd0d590752e00ba3983b4672da806.tar.bz2 |
prevent writing to stderr from messing up the exception state (closes #14474)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_thread.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_thread.py b/Lib/test/test_thread.py index 894a493..deb4bf3 100644 --- a/Lib/test/test_thread.py +++ b/Lib/test/test_thread.py @@ -128,6 +128,30 @@ class ThreadRunningTests(BasicThreadTest): time.sleep(0.01) self.assertEqual(thread._count(), orig) + def test_save_exception_state_on_error(self): + # See issue #14474 + def task(): + started.release() + sys.stderr = stderr + raise SyntaxError + def mywrite(self, *args): + try: + raise ValueError + except ValueError: + pass + real_write(self, *args) + c = thread._count() + started = thread.allocate_lock() + with support.captured_output("stderr") as stderr: + real_write = stderr.write + stderr.write = mywrite + started.acquire() + thread.start_new_thread(task, ()) + started.acquire() + while thread._count() > c: + pass + self.assertIn("Traceback", stderr.getvalue()) + class Barrier: def __init__(self, num_threads): |