Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-38858: Add _Py_IsMainInterpreter(tstate) #17293

Merged
merged 1 commit into from Nov 20, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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