]> granicus.if.org Git - python/commitdiff
bpo-36728: Remove PyEval_ReInitThreads() from C API (GH-13241)
authorVictor Stinner <vstinner@redhat.com>
Mon, 13 May 2019 10:35:37 +0000 (12:35 +0200)
committerGitHub <noreply@github.com>
Mon, 13 May 2019 10:35:37 +0000 (12:35 +0200)
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.

Doc/whatsnew/3.8.rst
Include/ceval.h
Include/internal/pycore_ceval.h
Misc/NEWS.d/next/C API/2019-05-11-03-56-23.bpo-36728.FR-dMP.rst [new file with mode: 0644]
Modules/posixmodule.c
Python/ceval.c

index 684656fc2a58f6304e201ddcf25ac99562829bf4..ac253059f328e3641f0ffb161760f307311e2f1e 100644 (file)
@@ -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
index 2d4b67d092bc3e545a32b2e852e75aec3d85b4a5..8cdf353b05fd07e3b46cc6cc408417f535328cbe 100644 (file)
@@ -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);
index cdc73a36e5bc1b3a0135e27102f2072dac4b5219..7a3166e86dab7f115efeedc033040cd7f37e6402 100644 (file)
@@ -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 (file)
index 0000000..c691cc4
--- /dev/null
@@ -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.
index aa77094da06a9391fae68b18fcf1d3b6c5285a6d..aca64efeb1e37f59cebcfb67b0dd39de152bb3ae 100644 (file)
 #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);
index 17439533a3f23561b17b9525e5cee038da5e168e..1bb4704572b44b08ec707c49db2c48a7cd020a77 100644 (file)
@@ -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;