Add a test for same-thread asynchronous exceptions (see #1779233).

This commit is contained in:
Antoine Pitrou 2009-10-18 18:22:04 +00:00
parent 53a9dc91d7
commit 8a172b14a3
1 changed files with 19 additions and 0 deletions

View File

@ -164,6 +164,25 @@ class ThreadTests(unittest.TestCase):
exception = ctypes.py_object(AsyncExc) 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 # `worker_started` is set by the thread when it's inside a try/except
# block waiting to catch the asynchronously set AsyncExc exception. # block waiting to catch the asynchronously set AsyncExc exception.
# `worker_saw_exception` is set by the thread upon catching that # `worker_saw_exception` is set by the thread upon catching that