[Python-checkins] bpo-40232: _PyImport_ReInitLock() can now safely use its lock (GH-20597)

Victor Stinner webhook-mailer at python.org
Tue Jun 2 11:14:01 EDT 2020


https://github.com/python/cpython/commit/45b34a04a577aa49fa4825421758c3e8eaa1625d
commit: 45b34a04a577aa49fa4825421758c3e8eaa1625d
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-06-02T17:13:49+02:00
summary:

bpo-40232: _PyImport_ReInitLock() can now safely use its lock (GH-20597)

Since _PyImport_ReInitLock() now calls _PyThread_at_fork_reinit() on
the import lock, the lock is now in a known state: unlocked. It
became safe to acquire it after fork.

files:
M Python/import.c

diff --git a/Python/import.c b/Python/import.c
index 35724fef37a6b..505688400ef3e 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -213,11 +213,7 @@ _PyImport_ReInitLock(void)
     if (import_lock_level > 1) {
         /* Forked as a side effect of import */
         unsigned long me = PyThread_get_thread_ident();
-        /* The following could fail if the lock is already held, but forking as
-           a side-effect of an import is a) rare, b) nuts, and c) difficult to
-           do thanks to the lock only being held when doing individual module
-           locks per import. */
-        PyThread_acquire_lock(import_lock, NOWAIT_LOCK);
+        PyThread_acquire_lock(import_lock, WAIT_LOCK);
         import_lock_thread = me;
         import_lock_level--;
     } else {



More information about the Python-checkins mailing list