mirror of
https://github.com/python/cpython
synced 2026-11-06 09:02:40 +03:00
gh-159652: Fix import lock leak when the C stack is nearly exhausted (GH-159660)
When an import failed with a stack overflow RecursionError, releasing the import locks on the error path could itself raise RecursionError, because the cleanup runs in a new C frame. This left the global import lock or a module lock held forever, and later imports in other threads blocked indefinitely.
_imp.acquire_lock() now raises RecursionError when there is not enough stack left to release the lock. importlib calls it before taking any import lock, so this covers the per-module locks too. The module lock weakref callback skips cleanup in that case instead of
reporting an unraisable exception.
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| metadata | ||
| resources | ||
| __init__.py | ||
| _abc.py | ||
| _bootstrap.py | ||
| _bootstrap_external.py | ||
| abc.py | ||
| machinery.py | ||
| readers.py | ||
| simple.py | ||
| util.py | ||