]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40232: _PyImport_ReInitLock() can now safely use its lock (GH-20597)
authorVictor Stinner <vstinner@python.org>
Tue, 2 Jun 2020 15:13:49 +0000 (17:13 +0200)
committerGitHub <noreply@github.com>
Tue, 2 Jun 2020 15:13:49 +0000 (17:13 +0200)
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.

Python/import.c

index 35724fef37a6bfe62f1bb265dddd953344e7dac3..505688400ef3e3a04dc72a46bc6a811b29f4f337 100644 (file)
@@ -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 {