summaryrefslogtreecommitdiffstats
path: root/Python/pystate.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/pystate.c')
-rw-r--r--Python/pystate.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/Python/pystate.c b/Python/pystate.c
index 7b3d3d4..d049811 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -4,12 +4,9 @@
#include "Python.h"
#include "internal/pystate.h"
-#define GET_TSTATE() \
- ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current))
-#define SET_TSTATE(value) \
- _Py_atomic_store_relaxed(&_PyThreadState_Current, (uintptr_t)(value))
-#define GET_INTERP_STATE() \
- (GET_TSTATE()->interp)
+#define _PyThreadState_SET(value) \
+ _Py_atomic_store_relaxed(&_PyRuntime.gilstate.tstate_current, \
+ (uintptr_t)(value))
/* --------------------------------------------------------------------------
@@ -309,7 +306,7 @@ _PyInterpreterState_DeleteExceptMain()
PyInterpreterState *
_PyInterpreterState_Get(void)
{
- PyThreadState *tstate = GET_TSTATE();
+ PyThreadState *tstate = PyThreadState_GET();
if (tstate == NULL) {
Py_FatalError("_PyInterpreterState_Get(): no current thread state");
}
@@ -508,7 +505,7 @@ PyObject*
PyState_FindModule(struct PyModuleDef* module)
{
Py_ssize_t index = module->m_base.m_index;
- PyInterpreterState *state = GET_INTERP_STATE();
+ PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
PyObject *res;
if (module->m_slots) {
return NULL;
@@ -536,7 +533,7 @@ _PyState_AddModule(PyObject* module, struct PyModuleDef* def)
"PyState_AddModule called on module with slots");
return -1;
}
- state = GET_INTERP_STATE();
+ state = _PyInterpreterState_GET_UNSAFE();
if (!state->modules_by_index) {
state->modules_by_index = PyList_New(0);
if (!state->modules_by_index)
@@ -554,7 +551,7 @@ int
PyState_AddModule(PyObject* module, struct PyModuleDef* def)
{
Py_ssize_t index;
- PyInterpreterState *state = GET_INTERP_STATE();
+ PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
if (!def) {
Py_FatalError("PyState_AddModule: Module Definition is NULL");
return -1;
@@ -581,7 +578,7 @@ PyState_RemoveModule(struct PyModuleDef* def)
"PyState_RemoveModule called on module with slots");
return -1;
}
- state = GET_INTERP_STATE();
+ state = _PyInterpreterState_GET_UNSAFE();
if (index == 0) {
Py_FatalError("PyState_RemoveModule: Module index invalid.");
return -1;
@@ -601,7 +598,7 @@ PyState_RemoveModule(struct PyModuleDef* def)
void
_PyState_ClearModules(void)
{
- PyInterpreterState *state = GET_INTERP_STATE();
+ PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
if (state->modules_by_index) {
Py_ssize_t i;
for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) {
@@ -691,7 +688,7 @@ tstate_delete_common(PyThreadState *tstate)
void
PyThreadState_Delete(PyThreadState *tstate)
{
- if (tstate == GET_TSTATE())
+ if (tstate == PyThreadState_GET())
Py_FatalError("PyThreadState_Delete: tstate is still current");
if (_PyRuntime.gilstate.autoInterpreterState &&
PyThread_tss_get(&_PyRuntime.gilstate.autoTSSkey) == tstate)
@@ -705,7 +702,7 @@ PyThreadState_Delete(PyThreadState *tstate)
void
PyThreadState_DeleteCurrent()
{
- PyThreadState *tstate = GET_TSTATE();
+ PyThreadState *tstate = PyThreadState_GET();
if (tstate == NULL)
Py_FatalError(
"PyThreadState_DeleteCurrent: no current tstate");
@@ -715,7 +712,7 @@ PyThreadState_DeleteCurrent()
{
PyThread_tss_set(&_PyRuntime.gilstate.autoTSSkey, NULL);
}
- SET_TSTATE(NULL);
+ _PyThreadState_SET(NULL);
PyEval_ReleaseLock();
}
@@ -760,14 +757,14 @@ _PyThreadState_DeleteExcept(PyThreadState *tstate)
PyThreadState *
_PyThreadState_UncheckedGet(void)
{
- return GET_TSTATE();
+ return PyThreadState_GET();
}
PyThreadState *
PyThreadState_Get(void)
{
- PyThreadState *tstate = GET_TSTATE();
+ PyThreadState *tstate = PyThreadState_GET();
if (tstate == NULL)
Py_FatalError("PyThreadState_Get: no current thread");
@@ -778,9 +775,9 @@ PyThreadState_Get(void)
PyThreadState *
PyThreadState_Swap(PyThreadState *newts)
{
- PyThreadState *oldts = GET_TSTATE();
+ PyThreadState *oldts = PyThreadState_GET();
- SET_TSTATE(newts);
+ _PyThreadState_SET(newts);
/* It should not be possible for more than one thread state
to be used for a thread. Check this the best we can in debug
builds.
@@ -809,7 +806,7 @@ PyThreadState_Swap(PyThreadState *newts)
PyObject *
PyThreadState_GetDict(void)
{
- PyThreadState *tstate = GET_TSTATE();
+ PyThreadState *tstate = PyThreadState_GET();
if (tstate == NULL)
return NULL;
@@ -834,7 +831,7 @@ PyThreadState_GetDict(void)
int
PyThreadState_SetAsyncExc(unsigned long id, PyObject *exc)
{
- PyInterpreterState *interp = GET_INTERP_STATE();
+ PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
PyThreadState *p;
/* Although the GIL is held, a few C API functions can be called
@@ -960,7 +957,7 @@ PyThreadState_IsCurrent(PyThreadState *tstate)
{
/* Must be the tstate for this thread */
assert(PyGILState_GetThisThreadState()==tstate);
- return tstate == GET_TSTATE();
+ return tstate == PyThreadState_GET();
}
/* Internal initialization/finalization functions called by
@@ -1087,7 +1084,7 @@ PyGILState_Check(void)
return 1;
}
- tstate = GET_TSTATE();
+ tstate = PyThreadState_GET();
if (tstate == NULL)
return 0;