From: Antoine Pitrou Date: Sun, 18 Oct 2009 18:27:17 +0000 (+0000) Subject: Merged revisions 75499 via svnmerge from X-Git-Tag: v3.2a1~2377 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=be4d8094c0098b3e3fcd8ada5fe2b0f9a43a2056;p=thirdparty%2FPython%2Fcpython.git Merged revisions 75499 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r75499 | antoine.pitrou | 2009-10-18 20:22:04 +0200 (dim., 18 oct. 2009) | 3 lines Add a test for same-thread asynchronous exceptions (see #1779233). ........ --- diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 500a114a9aec..8ce480e45841 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -162,6 +162,25 @@ class ThreadTests(unittest.TestCase): exception = ctypes.py_object(AsyncExc) + # First check it works when setting the exception from the same thread. + tid = _thread.get_ident() + + try: + result = set_async_exc(ctypes.c_long(tid), exception) + # The exception is async, so we might have to keep the VM busy until + # it notices. + while True: + pass + except AsyncExc: + pass + else: + self.fail("AsyncExc not raised") + try: + self.assertEqual(result, 1) # one thread state modified + except UnboundLocalError: + # The exception was raised to quickly for us to get the result. + pass + # `worker_started` is set by the thread when it's inside a try/except # block waiting to catch the asynchronously set AsyncExc exception. # `worker_saw_exception` is set by the thread upon catching that