diff options
author | Victor Stinner <vstinner@python.org> | 2023-09-29 19:31:19 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-29 19:31:19 (GMT) |
commit | 635184212179b0511768ea1cd57256e134ba2d75 (patch) | |
tree | 7755f29d577b5db379d9027cffd8363d1926fad6 /Python/Python-ast.c | |
parent | f3df8fa669158f89af69b5661e98314d98fb916f (diff) | |
download | cpython-635184212179b0511768ea1cd57256e134ba2d75.zip cpython-635184212179b0511768ea1cd57256e134ba2d75.tar.gz cpython-635184212179b0511768ea1cd57256e134ba2d75.tar.bz2 |
gh-109047: concurrent.futures catches PythonFinalizationError (#109810)
concurrent.futures: The *executor manager thread* now catches
exceptions when adding an item to the *call queue*. During Python
finalization, creating a new thread can now raise RuntimeError. Catch
the exception and call terminate_broken() in this case.
Add test_python_finalization_error() to test_concurrent_futures.
concurrent.futures._ExecutorManagerThread changes:
* terminate_broken() no longer calls shutdown_workers() since the
call queue is no longer working anymore (read and write ends of
the queue pipe are closed).
* terminate_broken() now terminates child processes, not only
wait until they complete.
* _ExecutorManagerThread.terminate_broken() now holds shutdown_lock
to prevent race conditons with ProcessPoolExecutor.submit().
multiprocessing.Queue changes:
* Add _terminate_broken() method.
* _start_thread() sets _thread to None on exception to prevent
leaking "dangling threads" even if the thread was not started
yet.
Diffstat (limited to 'Python/Python-ast.c')
0 files changed, 0 insertions, 0 deletions