]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 75499 via svnmerge from
authorAntoine Pitrou <solipsis@pitrou.net>
Sun, 18 Oct 2009 18:27:17 +0000 (18:27 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Sun, 18 Oct 2009 18:27:17 +0000 (18:27 +0000)
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).
........

Lib/test/test_threading.py

index 500a114a9aec93545dec9afd0d24bbd0bb114634..8ce480e45841b96baae02fbbfac4a877dfe4adab 100644 (file)
@@ -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