@ -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_STAT E( ) ;
PyInterpreterState * state = _PyInterpreterState_GET_UNSAF E( ) ;
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_STAT E( ) ;
state = _PyInterpreterState_GET_UNSAF E( ) ;
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_STAT E( ) ;
PyInterpreterState * state = _PyInterpreterState_GET_UNSAF E( ) ;
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_STAT E( ) ;
state = _PyInterpreterState_GET_UNSAF E( ) ;
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_STAT E( ) ;
PyInterpreterState * state = _PyInterpreterState_GET_UNSAF E( ) ;
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_STAT E( ) ;
PyInterpreterState * interp = _PyInterpreterState_GET_UNSAF E( ) ;
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 ;