Browse Source

bpo-31070: Fix a race condition in importlib _get_module_lock(). (#3033)

pull/3043/head
Serhiy Storchaka 9 years ago
committed by GitHub
parent
commit
9b0d1d647e
  1. 14
      Lib/importlib/_bootstrap.py
  2. 1
      Misc/NEWS.d/next/Core and Builtins/2017-08-09-09-40-54.bpo-31070.oDyLiI.rst
  3. 2951
      Python/importlib.h

14
Lib/importlib/_bootstrap.py

@ -172,8 +172,18 @@ def _get_module_lock(name):
lock = _DummyModuleLock(name)
else:
lock = _ModuleLock(name)
def cb(_):
del _module_locks[name]
def cb(ref, name=name):
_imp.acquire_lock()
try:
# bpo-31070: Check if another thread created a new lock
# after the previous lock was destroyed
# but before the weakref callback was called.
if _module_locks.get(name) is ref:
del _module_locks[name]
finally:
_imp.release_lock()
_module_locks[name] = _weakref.ref(lock, cb)
finally:
_imp.release_lock()

1
Misc/NEWS.d/next/Core and Builtins/2017-08-09-09-40-54.bpo-31070.oDyLiI.rst

@ -0,0 +1 @@
Fix a race condition in importlib _get_module_lock().

2951
Python/importlib.h
File diff suppressed because it is too large
View File

Loading…
Cancel
Save