Skip to content

Commit

Permalink
bpo-38858: Add _Py_IsMainInterpreter(tstate) (GH-17293)
Browse files Browse the repository at this point in the history
  • Loading branch information
vstinner committed Nov 20, 2019
1 parent db7925a commit fff7bbf
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
2 changes: 2 additions & 0 deletions Include/internal/pycore_pystate.h
Expand Up @@ -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 */
Expand Down
6 changes: 3 additions & 3 deletions Modules/_threadmodule.c
Expand Up @@ -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[] = {
Expand Down
6 changes: 6 additions & 0 deletions Python/pystate.c
Expand Up @@ -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);
Expand Down

0 comments on commit fff7bbf

Please sign in to comment.