]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-81057: Move the Remaining Import State Globals to _PyRuntimeState (gh-99488)
authorEric Snow <ericsnowcurrently@gmail.com>
Mon, 14 Nov 2022 22:56:16 +0000 (15:56 -0700)
committerGitHub <noreply@github.com>
Mon, 14 Nov 2022 22:56:16 +0000 (15:56 -0700)
https://github.com/python/cpython/issues/81057

Include/internal/pycore_import.h
Include/internal/pycore_runtime_init.h
Python/import.c
Tools/c-analyzer/cpython/globals-to-fix.tsv

index 7e8d73be5b9ac1e4d82c3ba8d143c7801a11e64e..8ba9666cdcf9a9caface825c6589b80d35f8fb2c 100644 (file)
@@ -21,6 +21,17 @@ struct _import_runtime_state {
        This is initialized lazily in _PyImport_FixupExtensionObject().
        Modules are added there and looked up in _imp.find_extension(). */
     PyObject *extensions;
+    /* The global import lock. */
+    struct {
+        PyThread_type_lock mutex;
+        unsigned long thread;
+        int level;
+    } lock;
+    struct {
+        int import_level;
+        _PyTime_t accumulated;
+        int header;
+    } find_and_load;
 };
 
 
index 9a2aad24b5697052204e0e5c3e899de3e27ece95..ea98c3784ff30047bdce0b42c4f32cca1fbf21d8 100644 (file)
@@ -39,6 +39,16 @@ extern "C" {
         .types = { \
             .next_version_tag = 1, \
         }, \
+        .imports = { \
+            .lock = { \
+                .mutex = NULL, \
+                .thread = PYTHREAD_INVALID_THREAD_ID, \
+                .level = 0, \
+            }, \
+            .find_and_load = { \
+                .header = 1, \
+            }, \
+        }, \
         .global_objects = { \
             .singletons = { \
                 .small_ints = _Py_small_ints_INIT, \
index daee16ec4ddddfe8ee543a3a63baf635eeaf04a7..c12b3e07b5d4375ea5a146a53ddbf5dd051d8e6b 100644 (file)
@@ -94,9 +94,9 @@ _PyImportZip_Init(PyThreadState *tstate)
    in different threads to return with a partially loaded module.
    These calls are serialized by the global interpreter lock. */
 
-static PyThread_type_lock import_lock = NULL;
-static unsigned long import_lock_thread = PYTHREAD_INVALID_THREAD_ID;
-static int import_lock_level = 0;
+#define import_lock _PyRuntime.imports.lock.mutex
+#define import_lock_thread _PyRuntime.imports.lock.thread
+#define import_lock_level _PyRuntime.imports.lock.level
 
 void
 _PyImport_AcquireLock(void)
@@ -1759,8 +1759,8 @@ import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
     PyObject *mod = NULL;
     PyInterpreterState *interp = tstate->interp;
     int import_time = _PyInterpreterState_GetConfig(interp)->import_time;
-    static int import_level;
-    static _PyTime_t accumulated;
+#define import_level _PyRuntime.imports.find_and_load.import_level
+#define accumulated _PyRuntime.imports.find_and_load.accumulated
 
     _PyTime_t t1 = 0, accumulated_copy = accumulated;
 
@@ -1781,12 +1781,13 @@ import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
      * _PyDict_GetItemIdWithError().
      */
     if (import_time) {
-        static int header = 1;
+#define header _PyRuntime.imports.find_and_load.header
         if (header) {
             fputs("import time: self [us] | cumulative | imported package\n",
                   stderr);
             header = 0;
         }
+#undef header
 
         import_level++;
         t1 = _PyTime_GetPerfCounter();
@@ -1816,6 +1817,8 @@ import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
     }
 
     return mod;
+#undef import_level
+#undef accumulated
 }
 
 PyObject *
index aaae1e851480ebe72fca1e415c660bf83baa44f4..b60f16db9a28acd37e0770857fbffaa6942a6274 100644 (file)
@@ -368,8 +368,6 @@ Python/dtoa.c       -       p5s     -
 Python/fileutils.c     -       _Py_open_cloexec_works  -
 Python/fileutils.c     -       force_ascii     -
 Python/fileutils.c     set_inheritable ioctl_works     -
-Python/import.c        -       import_lock     -
-Python/import.c        import_find_and_load    header  -
 
 #-----------------------
 # unlikely to change after init (or main thread)
@@ -431,10 +429,6 @@ Python/bootstrap_hash.c    -       urandom_cache   -
 Python/ceval_gil.c     make_pending_calls      busy    -
 Python/ceval.c _PyEval_SetProfile      reentrant       -
 Python/ceval.c _PyEval_SetTrace        reentrant       -
-Python/import.c        -       import_lock_level       -
-Python/import.c        -       import_lock_thread      -
-Python/import.c        import_find_and_load    accumulated     -
-Python/import.c        import_find_and_load    import_level    -
 Python/modsupport.c    -       _Py_PackageContext      -
 Python/thread_pthread_stubs.h  -       py_tls_entries  -
 Python/pyfpe.c -       PyFPE_counter   -