aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-03-09 20:56:57 +0100
committerGitHub <noreply@github.com>2020-03-09 20:56:57 +0100
commit3225b9f9739cd4bcca372d0fa939cea1ae5c6402 (patch)
tree008faa6d058d9f9e449bf2113287aa5e30c8a35f
parentbpo-38249: Expand Py_UNREACHABLE() to __builtin_unreachable() in the release ... (diff)
downloadcpython-3225b9f9739cd4bcca372d0fa939cea1ae5c6402.tar.gz
cpython-3225b9f9739cd4bcca372d0fa939cea1ae5c6402.tar.bz2
cpython-3225b9f9739cd4bcca372d0fa939cea1ae5c6402.zip
bpo-39877: Remove useless PyEval_InitThreads() calls (GH-18883)
Py_Initialize() calls PyEval_InitThreads() since Python 3.7. It's no longer needed to call it explicitly.
-rw-r--r--Include/ceval.h3
-rw-r--r--Lib/test/test_embed.py5
-rw-r--r--Modules/_ctypes/_ctypes.c1
-rw-r--r--Modules/_ctypes/callbacks.c1
-rw-r--r--Modules/_testcapimodule.c4
-rw-r--r--Modules/_threadmodule.c2
-rw-r--r--Programs/_testembed.c6
-rw-r--r--Python/ceval.c6
8 files changed, 7 insertions, 21 deletions
diff --git a/Include/ceval.h b/Include/ceval.h
index 62c6489ed1..e977fcb43d 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -121,9 +121,6 @@ PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
Py_END_ALLOW_THREADS!!!
- The function PyEval_InitThreads() should be called only from
- init_thread() in "_threadmodule.c".
-
Note that not yet all candidates have been converted to use this
mechanism!
*/
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 87842b9377..46ed113e85 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -267,9 +267,8 @@ class EmbeddingTests(EmbeddingTestsMixin, unittest.TestCase):
def test_bpo20891(self):
"""
- bpo-20891: Calling PyGILState_Ensure in a non-Python thread before
- calling PyEval_InitThreads() must not crash. PyGILState_Ensure() must
- call PyEval_InitThreads() for us in this case.
+ bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
+ crash.
"""
out, err = self.run_embedded_interpreter("test_bpo20891")
self.assertEqual(out, '')
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 4747195c2e..dab3939647 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -5695,7 +5695,6 @@ PyInit__ctypes(void)
ob_type is the metatype (the 'type'), defaults to PyType_Type,
tp_base is the base type, defaults to 'object' aka PyBaseObject_Type.
*/
- PyEval_InitThreads();
m = PyModule_Create(&_ctypesmodule);
if (!m)
return NULL;
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index d2d9a6587d..2b903c98e8 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -423,7 +423,6 @@ static void LoadPython(void)
{
if (!Py_IsInitialized()) {
Py_Initialize();
- PyEval_InitThreads();
}
}
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 2b871b86bf..3132f52158 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -2728,8 +2728,6 @@ test_thread_state(PyObject *self, PyObject *args)
return NULL;
}
- /* Ensure Python is set up for threading */
- PyEval_InitThreads();
thread_done = PyThread_allocate_lock();
if (thread_done == NULL)
return PyErr_NoMemory();
@@ -4175,8 +4173,6 @@ call_in_temporary_c_thread(PyObject *self, PyObject *callback)
test_c_thread_t test_c_thread;
long thread;
- PyEval_InitThreads();
-
test_c_thread.start_event = PyThread_allocate_lock();
test_c_thread.exit_event = PyThread_allocate_lock();
test_c_thread.callback = NULL;
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index 11bc16f4b3..ee70183df5 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -1074,7 +1074,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs)
Py_INCREF(func);
Py_INCREF(args);
Py_XINCREF(keyw);
- PyEval_InitThreads(); /* Start the interpreter's thread-awareness */
+
ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);
if (ident == PYTHREAD_INVALID_THREAD_ID) {
PyErr_SetString(ThreadError, "can't start new thread");
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index b98696cbe0..900a4b1d42 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -62,7 +62,6 @@ static int test_repeated_init_and_subinterpreters(void)
_testembed_Py_Initialize();
mainstate = PyThreadState_Get();
- PyEval_InitThreads();
PyEval_ReleaseThread(mainstate);
gilstate = PyGILState_Ensure();
@@ -252,9 +251,8 @@ static int test_bpo20891(void)
/* the test doesn't support custom memory allocators */
putenv("PYTHONMALLOC=");
- /* bpo-20891: Calling PyGILState_Ensure in a non-Python thread before
- calling PyEval_InitThreads() must not crash. PyGILState_Ensure() must
- call PyEval_InitThreads() for us in this case. */
+ /* bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
+ crash. */
PyThread_type_lock lock = PyThread_allocate_lock();
if (!lock) {
fprintf(stderr, "PyThread_allocate_lock failed!");
diff --git a/Python/ceval.c b/Python/ceval.c
index 42f08c4534..26cefeadcd 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -345,7 +345,7 @@ PyEval_AcquireThread(PyThreadState *tstate)
_PyRuntimeState *runtime = tstate->interp->runtime;
struct _ceval_runtime_state *ceval = &runtime->ceval;
- /* Check someone has called PyEval_InitThreads() to create the lock */
+ /* Check that _PyEval_InitThreads() was called to create the lock */
assert(gil_created(&ceval->gil));
take_gil(ceval, tstate);
@@ -541,9 +541,7 @@ Py_AddPendingCall(int (*func)(void *), void *arg)
static int
handle_signals(_PyRuntimeState *runtime)
{
- /* Only handle signals on main thread. PyEval_InitThreads must
- * have been called already.
- */
+ /* Only handle signals on main thread */
if (PyThread_get_thread_ident() != runtime->main_thread) {
return 0;
}