summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2019-11-20 16:34:39 (GMT)
committerGitHub <noreply@github.com>2019-11-20 16:34:39 (GMT)
commitfff7bbfdb6b7c143b73b6b4b6b40e828c101110c (patch)
tree36493fb3f956d9c5867b7312a0916c38956d0e13
parentdb7925a1cac361ad8c94123a38b00b70f306c48d (diff)
downloadcpython-fff7bbfdb6b7c143b73b6b4b6b40e828c101110c.zip
cpython-fff7bbfdb6b7c143b73b6b4b6b40e828c101110c.tar.gz
cpython-fff7bbfdb6b7c143b73b6b4b6b40e828c101110c.tar.bz2
bpo-38858: Add _Py_IsMainInterpreter(tstate) (GH-17293)
-rw-r--r--Include/internal/pycore_pystate.h2
-rw-r--r--Modules/_threadmodule.c6
-rw-r--r--Python/pystate.c6
3 files changed, 11 insertions, 3 deletions
diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h
index 0c3c1e3..936e9cb 100644
--- a/Include/internal/pycore_pystate.h
+++ b/Include/internal/pycore_pystate.h
@@ -269,6 +269,8 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void);
#define _Py_CURRENTLY_FINALIZING(runtime, tstate) \
(runtime->finalizing == tstate)
+PyAPI_FUNC(int) _Py_IsMainInterpreter(PyThreadState* tstate);
+
/* Variable and macro for in-line access to current thread
and interpreter state */
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index befd213..4a651ce 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -1466,9 +1466,9 @@ static PyObject *
_thread__is_main_interpreter_impl(PyObject *module)
/*[clinic end generated code: output=7dd82e1728339adc input=cc1eb00fd4598915]*/
{
- _PyRuntimeState *runtime = &_PyRuntime;
- PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
- return PyBool_FromLong(interp == runtime->interpreters.main);
+ PyThreadState *tstate = _PyThreadState_GET();
+ int is_main = _Py_IsMainInterpreter(tstate);
+ return PyBool_FromLong(is_main);
}
static PyMethodDef thread_methods[] = {
diff --git a/Python/pystate.c b/Python/pystate.c
index 2fc563b..0a6d035 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -159,6 +159,12 @@ _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime)
#define HEAD_UNLOCK(runtime) \
PyThread_release_lock((runtime)->interpreters.mutex)
+int
+_Py_IsMainInterpreter(PyThreadState* tstate)
+{
+ return (tstate->interp == tstate->interp->runtime->interpreters.main);
+}
+
/* Forward declaration */
static void _PyGILState_NoteThreadState(
struct _gilstate_runtime_state *gilstate, PyThreadState* tstate);