From 84ad264ce602fb263a46a4536377bdc830eea81e Mon Sep 17 00:00:00 2001 From: Peter Bierma Date: Thu, 5 Sep 2024 19:53:47 -0400 Subject: [PATCH] gh-123275: Support `-Xgil=1` and `PYTHON_GIL=1` on non-free-threaded builds (gh-123276) --- Doc/using/cmdline.rst | 7 +++---- .../2024-08-23-18-31-10.gh-issue-123275.DprIrj.rst | 1 + Python/initconfig.c | 12 ++++++++---- 3 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2024-08-23-18-31-10.gh-issue-123275.DprIrj.rst diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst index 66f7d5fa38d..6cf42b27718 100644 --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -622,7 +622,7 @@ Miscellaneous options .. versionadded:: 3.13 * :samp:`-X gil={0,1}` forces the GIL to be disabled or enabled, - respectively. Only available in builds configured with + respectively. Setting to ``0`` is only available in builds configured with :option:`--disable-gil`. See also :envvar:`PYTHON_GIL` and :ref:`whatsnew313-free-threaded-cpython`. @@ -1221,13 +1221,12 @@ conflict. .. envvar:: PYTHON_GIL If this variable is set to ``1``, the global interpreter lock (GIL) will be - forced on. Setting it to ``0`` forces the GIL off. + forced on. Setting it to ``0`` forces the GIL off (needs Python configured with + the :option:`--disable-gil` build option). See also the :option:`-X gil <-X>` command-line option, which takes precedence over this variable, and :ref:`whatsnew313-free-threaded-cpython`. - Needs Python configured with the :option:`--disable-gil` build option. - .. versionadded:: 3.13 Debug-mode variables diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-08-23-18-31-10.gh-issue-123275.DprIrj.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-08-23-18-31-10.gh-issue-123275.DprIrj.rst new file mode 100644 index 00000000000..ab344a8ca40 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-08-23-18-31-10.gh-issue-123275.DprIrj.rst @@ -0,0 +1 @@ +Support :option:`-X gil=1 <-X>` and :envvar:`PYTHON_GIL=1 ` on non-free-threaded builds. diff --git a/Python/initconfig.c b/Python/initconfig.c index 2e7623f0a54..d93244f7f41 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -1714,20 +1714,24 @@ config_wstr_to_int(const wchar_t *wstr, int *result) static PyStatus config_read_gil(PyConfig *config, size_t len, wchar_t first_char) { -#ifdef Py_GIL_DISABLED if (len == 1 && first_char == L'0') { +#ifdef Py_GIL_DISABLED config->enable_gil = _PyConfig_GIL_DISABLE; +#else + return _PyStatus_ERR("Disabling the GIL is not supported by this build"); +#endif } else if (len == 1 && first_char == L'1') { +#ifdef Py_GIL_DISABLED config->enable_gil = _PyConfig_GIL_ENABLE; +#else + return _PyStatus_OK(); +#endif } else { return _PyStatus_ERR("PYTHON_GIL / -X gil must be \"0\" or \"1\""); } return _PyStatus_OK(); -#else - return _PyStatus_ERR("PYTHON_GIL / -X gil are not supported by this build"); -#endif } static PyStatus