]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-91173: disable frozen modules in debug builds (#92023)
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Tue, 3 May 2022 22:20:13 +0000 (03:50 +0530)
committerGitHub <noreply@github.com>
Tue, 3 May 2022 22:20:13 +0000 (15:20 -0700)
Lib/test/test_embed.py
Misc/NEWS.d/next/Core and Builtins/2022-05-02-12-40-18.gh-issue-91173.k_Dr6z.rst [new file with mode: 0644]
Python/initconfig.c

index 9bb4bd7e8feb7d3d5d5e3a5741dc62e9226b0c7b..e25541820748bf449c373297b3a3a12c05fb5bee 100644 (file)
@@ -22,7 +22,7 @@ if not support.has_subprocess_support:
 
 MS_WINDOWS = (os.name == 'nt')
 MACOS = (sys.platform == 'darwin')
-
+Py_DEBUG = hasattr(sys, 'gettotalrefcount')
 PYMEM_ALLOCATOR_NOT_SET = 0
 PYMEM_ALLOCATOR_DEBUG = 2
 PYMEM_ALLOCATOR_MALLOC = 3
@@ -478,7 +478,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
         'pathconfig_warnings': 1,
         '_init_main': 1,
         '_isolated_interpreter': 0,
-        'use_frozen_modules': 1,
+        'use_frozen_modules': not Py_DEBUG,
         '_is_python_build': IGNORE_CONFIG,
     }
     if MS_WINDOWS:
@@ -1177,7 +1177,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
              # The current getpath.c doesn't determine the stdlib dir
              # in this case.
             'stdlib_dir': '',
-            'use_frozen_modules': 1,
+            'use_frozen_modules': not Py_DEBUG,
             # overridden by PyConfig
             'program_name': 'conf_program_name',
             'base_executable': 'conf_executable',
@@ -1416,12 +1416,12 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
                 config['base_prefix'] = pyvenv_home
                 config['prefix'] = pyvenv_home
                 config['stdlib_dir'] = os.path.join(pyvenv_home, 'Lib')
-                config['use_frozen_modules'] = 1
+                config['use_frozen_modules'] = not Py_DEBUG
             else:
                 # cannot reliably assume stdlib_dir here because it
                 # depends too much on our build. But it ought to be found
                 config['stdlib_dir'] = self.IGNORE_CONFIG
-                config['use_frozen_modules'] = 1
+                config['use_frozen_modules'] = not Py_DEBUG
 
             env = self.copy_paths_by_env(config)
             self.check_all_configs("test_init_compat_config", config,
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-02-12-40-18.gh-issue-91173.k_Dr6z.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-02-12-40-18.gh-issue-91173.k_Dr6z.rst
new file mode 100644 (file)
index 0000000..fa77613
--- /dev/null
@@ -0,0 +1 @@
+Disable frozen modules in debug builds. Patch by Kumar Aditya.
index 729f7f393a39b59590ebdbd4df424d516df141f7..d928ebe88553a35403c4ea4996584e810dfc103b 100644 (file)
@@ -732,7 +732,11 @@ _PyConfig_InitCompatConfig(PyConfig *config)
 #ifdef MS_WINDOWS
     config->legacy_windows_stdio = -1;
 #endif
-    config->use_frozen_modules = -1;
+#ifdef Py_DEBUG
+    config->use_frozen_modules = 0;
+#else
+    config->use_frozen_modules = 1;
+#endif
     config->_is_python_build = 0;
     config->code_debug_ranges = 1;
 }
@@ -1978,25 +1982,22 @@ config_init_import(PyConfig *config, int compute_path_config)
     }
 
     /* -X frozen_modules=[on|off] */
-    if (config->use_frozen_modules < 0) {
-        const wchar_t *value = config_get_xoption_value(config, L"frozen_modules");
-        if (value == NULL) {
-            config->use_frozen_modules = !config->_is_python_build;
-        }
-        else if (wcscmp(value, L"on") == 0) {
-            config->use_frozen_modules = 1;
-        }
-        else if (wcscmp(value, L"off") == 0) {
-            config->use_frozen_modules = 0;
-        }
-        else if (wcslen(value) == 0) {
-            // "-X frozen_modules" and "-X frozen_modules=" both imply "on".
-            config->use_frozen_modules = 1;
-        }
-        else {
-            return PyStatus_Error("bad value for option -X frozen_modules "
-                                  "(expected \"on\" or \"off\")");
-        }
+    const wchar_t *value = config_get_xoption_value(config, L"frozen_modules");
+    if (value == NULL) {
+    }
+    else if (wcscmp(value, L"on") == 0) {
+        config->use_frozen_modules = 1;
+    }
+    else if (wcscmp(value, L"off") == 0) {
+        config->use_frozen_modules = 0;
+    }
+    else if (wcslen(value) == 0) {
+        // "-X frozen_modules" and "-X frozen_modules=" both imply "on".
+        config->use_frozen_modules = 1;
+    }
+    else {
+        return PyStatus_Error("bad value for option -X frozen_modules "
+                              "(expected \"on\" or \"off\")");
     }
 
     return _PyStatus_OK();