summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-05-13 10:35:37 (GMT)
committerGitHub <noreply@github.com>2019-05-13 10:35:37 (GMT)
commitd5d9e81ce9a7efc5bc14a5c21398d1ef6f626884 (patch)
tree0650e31fe590d6be19dc21546cd129d68139d4af
parent3aef48e3157f52a8bcdbacf47a35d0016348735e (diff)
downloadcpython-d5d9e81ce9a7efc5bc14a5c21398d1ef6f626884.zip
cpython-d5d9e81ce9a7efc5bc14a5c21398d1ef6f626884.tar.gz
cpython-d5d9e81ce9a7efc5bc14a5c21398d1ef6f626884.tar.bz2
bpo-36728: Remove PyEval_ReInitThreads() from C API (GH-13241)
Remove the PyEval_ReInitThreads() function from the Python C API. It should not be called explicitly: use PyOS_AfterFork_Child() instead. Rename PyEval_ReInitThreads() to _PyEval_ReInitThreads() and add a 'runtime' parameter.
-rw-r--r--Doc/whatsnew/3.8.rst5
-rw-r--r--Include/ceval.h1
-rw-r--r--Include/internal/pycore_ceval.h2
-rw-r--r--Misc/NEWS.d/next/C API/2019-05-11-03-56-23.bpo-36728.FR-dMP.rst2
-rw-r--r--Modules/posixmodule.c19
-rw-r--r--Python/ceval.c3
6 files changed, 25 insertions, 7 deletions
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 684656f..ac25305 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -990,6 +990,11 @@ Changes in the Python API
Changes in the C API
--------------------
+* The :c:func:`PyEval_ReInitThreads` function has been removed from the C API.
+ It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child`
+ instead.
+ (Contributed by Victor Stinner in :issue:`36728`.)
+
* On Unix, C extensions are no longer linked to libpython except on
Android. When Python is embedded, ``libpython`` must not be loaded with
``RTLD_LOCAL``, but ``RTLD_GLOBAL`` instead. Previously, using
diff --git a/Include/ceval.h b/Include/ceval.h
index 2d4b67d..8cdf353 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -195,7 +195,6 @@ PyAPI_FUNC(void) PyEval_AcquireLock(void) Py_DEPRECATED(3.2);
PyAPI_FUNC(void) PyEval_ReleaseLock(void) /* Py_DEPRECATED(3.2) */;
PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
-PyAPI_FUNC(void) PyEval_ReInitThreads(void);
#ifndef Py_LIMITED_API
PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h
index cdc73a3..7a3166e 100644
--- a/Include/internal/pycore_ceval.h
+++ b/Include/internal/pycore_ceval.h
@@ -24,6 +24,8 @@ PyAPI_FUNC(int) _PyEval_AddPendingCall(
void *arg);
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
struct _ceval_runtime_state *ceval);
+PyAPI_FUNC(void) _PyEval_ReInitThreads(
+ _PyRuntimeState *runtime);
#ifdef __cplusplus
}
diff --git a/Misc/NEWS.d/next/C API/2019-05-11-03-56-23.bpo-36728.FR-dMP.rst b/Misc/NEWS.d/next/C API/2019-05-11-03-56-23.bpo-36728.FR-dMP.rst
new file mode 100644
index 0000000..c691cc4
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2019-05-11-03-56-23.bpo-36728.FR-dMP.rst
@@ -0,0 +1,2 @@
+The :c:func:`PyEval_ReInitThreads` function has been removed from the C API.
+It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child` instead.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index aa77094..aca64ef 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -25,14 +25,25 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#ifdef MS_WINDOWS
+ /* include <windows.h> early to avoid conflict with pycore_condvar.h:
+
+ #define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+
+ FSCTL_GET_REPARSE_POINT is not exported with WIN32_LEAN_AND_MEAN. */
+# include <windows.h>
+#endif
+
+#include "pycore_ceval.h" /* _PyEval_ReInitThreads() */
+#include "pycore_pystate.h" /* _PyRuntime */
#include "pythread.h"
#include "structmember.h"
#ifndef MS_WINDOWS
-#include "posixmodule.h"
+# include "posixmodule.h"
#else
-#include "winreparse.h"
+# include "winreparse.h"
#endif
-#include "pycore_pystate.h"
/* On android API level 21, 'AT_EACCESS' is not declared although
* HAVE_FACCESSAT is defined. */
@@ -424,7 +435,7 @@ PyOS_AfterFork_Child(void)
_PyRuntimeState *runtime = &_PyRuntime;
_PyGILState_Reinit(runtime);
_PyInterpreterState_DeleteExceptMain(runtime);
- PyEval_ReInitThreads();
+ _PyEval_ReInitThreads(runtime);
_PyImport_ReInitLock();
_PySignal_AfterFork();
_PyRuntimeState_ReInitThreads(runtime);
diff --git a/Python/ceval.c b/Python/ceval.c
index 1743953..1bb4704 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -289,9 +289,8 @@ PyEval_ReleaseThread(PyThreadState *tstate)
*/
void
-PyEval_ReInitThreads(void)
+_PyEval_ReInitThreads(_PyRuntimeState *runtime)
{
- _PyRuntimeState *runtime = &_PyRuntime;
struct _ceval_runtime_state *ceval = &runtime->ceval;
if (!gil_created(&ceval->gil)) {
return;