summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2024-04-17 13:01:28 (GMT)
committerGitHub <noreply@github.com>2024-04-17 13:01:28 (GMT)
commit75eed5b3734edb221cabb8322d8b8bdf9e3ee6b1 (patch)
tree3643d638122610332a88ff62c02dcb968b5d6508
parent6d0bb43232dd6ebc5245daa4fe29f07f815f0bad (diff)
downloadcpython-75eed5b3734edb221cabb8322d8b8bdf9e3ee6b1.zip
cpython-75eed5b3734edb221cabb8322d8b8bdf9e3ee6b1.tar.gz
cpython-75eed5b3734edb221cabb8322d8b8bdf9e3ee6b1.tar.bz2
gh-117929: Restore removed PyEval_InitThreads() function (#117931)
-rw-r--r--Doc/c-api/init.rst30
-rw-r--r--Doc/data/stable_abi.dat1
-rw-r--r--Doc/whatsnew/3.13.rst6
-rw-r--r--Include/ceval.h2
-rw-r--r--Misc/NEWS.d/next/C API/2024-04-16-13-34-01.gh-issue-117929.HSr419.rst2
-rw-r--r--Misc/stable_abi.toml1
-rw-r--r--Python/ceval_gil.c3
7 files changed, 38 insertions, 7 deletions
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index 05f2fd1..9b98e71 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -59,7 +59,7 @@ The following functions can be safely called before Python is initialized:
:c:func:`Py_Initialize`: :c:func:`Py_EncodeLocale`, :c:func:`Py_GetPath`,
:c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`,
:c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`,
- and :c:func:`Py_GetProgramName`.
+ :c:func:`Py_GetProgramName` and :c:func:`PyEval_InitThreads`.
.. _global-conf-vars:
@@ -326,6 +326,7 @@ Initializing and finalizing the interpreter
.. c:function:: void Py_Initialize()
.. index::
+ single: PyEval_InitThreads()
single: modules (in module sys)
single: path (in module sys)
pair: module; builtins
@@ -841,6 +842,33 @@ code, or when embedding the Python interpreter:
This thread's interpreter state.
+.. c:function:: void PyEval_InitThreads()
+
+ .. index::
+ single: PyEval_AcquireThread()
+ single: PyEval_ReleaseThread()
+ single: PyEval_SaveThread()
+ single: PyEval_RestoreThread()
+
+ Deprecated function which does nothing.
+
+ In Python 3.6 and older, this function created the GIL if it didn't exist.
+
+ .. versionchanged:: 3.9
+ The function now does nothing.
+
+ .. versionchanged:: 3.7
+ This function is now called by :c:func:`Py_Initialize()`, so you don't
+ have to call it yourself anymore.
+
+ .. versionchanged:: 3.2
+ This function cannot be called before :c:func:`Py_Initialize()` anymore.
+
+ .. deprecated:: 3.9
+
+ .. index:: pair: module; _thread
+
+
.. c:function:: PyThreadState* PyEval_SaveThread()
Release the global interpreter lock (if it has been created) and reset the
diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat
index 2763bea..aa90223 100644
--- a/Doc/data/stable_abi.dat
+++ b/Doc/data/stable_abi.dat
@@ -192,6 +192,7 @@ function,PyEval_GetFuncDesc,3.2,,
function,PyEval_GetFuncName,3.2,,
function,PyEval_GetGlobals,3.2,,
function,PyEval_GetLocals,3.2,,
+function,PyEval_InitThreads,3.2,,
function,PyEval_ReleaseThread,3.2,,
function,PyEval_RestoreThread,3.2,,
function,PyEval_SaveThread,3.2,,
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index f957698..86c6a7e 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -2027,9 +2027,9 @@ Removed
added in Python 3.8 and the old macros were deprecated in Python 3.11.
(Contributed by Irit Katriel in :gh:`105111`.)
-* Remove ``PyEval_InitThreads()`` and ``PyEval_ThreadsInitialized()``
- functions, deprecated in Python 3.9. Since Python 3.7, ``Py_Initialize()``
- always creates the GIL: calling ``PyEval_InitThreads()`` did nothing and
+* Remove ``PyEval_ThreadsInitialized()``
+ function, deprecated in Python 3.9. Since Python 3.7, ``Py_Initialize()``
+ always creates the GIL: calling ``PyEval_InitThreads()`` does nothing and
``PyEval_ThreadsInitialized()`` always returned non-zero.
(Contributed by Victor Stinner in :gh:`105182`.)
diff --git a/Include/ceval.h b/Include/ceval.h
index 9885bdb..8ea9da8 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -107,6 +107,8 @@ PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(PyFrameObject *f, int exc);
PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);
+Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
+
PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
diff --git a/Misc/NEWS.d/next/C API/2024-04-16-13-34-01.gh-issue-117929.HSr419.rst b/Misc/NEWS.d/next/C API/2024-04-16-13-34-01.gh-issue-117929.HSr419.rst
new file mode 100644
index 0000000..58d475b
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2024-04-16-13-34-01.gh-issue-117929.HSr419.rst
@@ -0,0 +1,2 @@
+Restore removed :c:func:`PyEval_InitThreads` function. Patch by Victor
+Stinner.
diff --git a/Misc/stable_abi.toml b/Misc/stable_abi.toml
index 14dda7d..ad6f0ee 100644
--- a/Misc/stable_abi.toml
+++ b/Misc/stable_abi.toml
@@ -702,7 +702,6 @@
added = '3.2'
[function.PyEval_InitThreads]
added = '3.2'
- abi_only = true
[function.PyEval_ReleaseLock]
added = '3.2'
abi_only = true
diff --git a/Python/ceval_gil.c b/Python/ceval_gil.c
index d88ac65..c0819d8 100644
--- a/Python/ceval_gil.c
+++ b/Python/ceval_gil.c
@@ -512,8 +512,7 @@ _PyEval_FiniGIL(PyInterpreterState *interp)
interp->ceval.gil = NULL;
}
-// Function removed in the Python 3.13 API but kept in the stable ABI.
-PyAPI_FUNC(void)
+void
PyEval_InitThreads(void)
{
/* Do nothing: kept for backward compatibility */