mirror of
https://github.com/python/cpython.git
synced 2025-11-07 09:02:02 +00:00
There was a deadlock when `ProcessPoolExecutor` shuts down at the same
time that a queueing thread handles an error processing a task.
Don't use `_shutdown_lock` to protect the `_ThreadWakeup` pipes -- use
an internal lock instead. This fixes the ordering deadlock where the
`ExecutorManagerThread` holds the `_shutdown_lock` and joins the
queueing thread, while the queueing thread is attempting to acquire the
`_shutdown_lock` while closing the `_ThreadWakeup`.
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| __init__.py | ||
| _base.py | ||
| process.py | ||
| thread.py | ||