diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index 70522288041..9b28f66fdba 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -165,7 +165,7 @@ PyAPI_FUNC(int) PyGILState_Check(void); This function doesn't check for error. Return NULL before _PyGILState_Init() is called and after _PyGILState_Fini() is called. - See also _PyInterpreterState_Get() and _PyInterpreterState_GET_UNSAFE(). */ + See also _PyInterpreterState_Get() and _PyInterpreterState_GET(). */ PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void); /* The implementation of sys._current_frames() Returns a dict mapping diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 2e783781ada..c82e8db9051 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -78,8 +78,9 @@ static inline PyThreadState *_PyThreadState_GET(void) { See also _PyInterpreterState_Get() and _PyGILState_GetInterpreterStateUnsafe(). */ -static inline PyInterpreterState* _PyInterpreterState_GET_UNSAFE(void) { +static inline PyInterpreterState* _PyInterpreterState_GET(void) { PyThreadState *tstate = _PyThreadState_GET(); + assert(tstate != NULL); return tstate->interp; } diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 492988ef422..95b023d1790 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -994,7 +994,7 @@ io_check_errors(PyObject *errors) { assert(errors != NULL && errors != Py_None); - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); #ifndef Py_DEBUG /* In release mode, only check in development mode (-X dev) */ if (!_PyInterpreterState_GetConfig(interp)->dev_mode) { diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 9853699771a..5636140dde4 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -1091,7 +1091,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) boot = PyMem_NEW(struct bootstate, 1); if (boot == NULL) return PyErr_NoMemory(); - boot->interp = _PyInterpreterState_GET_UNSAFE(); + boot->interp = _PyInterpreterState_GET(); boot->func = func; boot->args = args; boot->keyw = keyw; @@ -1213,7 +1213,7 @@ particular thread within a system."); static PyObject * thread__count(PyObject *self, PyObject *Py_UNUSED(ignored)) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); return PyLong_FromLong(interp->num_threads); } @@ -1556,7 +1556,7 @@ PyInit__thread(void) PyObject *m, *d, *v; double time_max; double timeout_max; - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); /* Initialize types: */ if (PyType_Ready(&localdummytype) < 0) diff --git a/Modules/main.c b/Modules/main.c index a9de70b6b09..fb24c6c6c28 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -498,7 +498,7 @@ pymain_repl(PyConfig *config, PyCompilerFlags *cf, int *exitcode) static void pymain_run_python(int *exitcode) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); /* pymain_run_stdin() modify the config */ PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(interp); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 57f148726bc..2d603d14e8d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -451,7 +451,7 @@ run_at_forkers(PyObject *lst, int reverse) void PyOS_BeforeFork(void) { - run_at_forkers(_PyInterpreterState_GET_UNSAFE()->before_forkers, 1); + run_at_forkers(_PyInterpreterState_GET()->before_forkers, 1); _PyImport_AcquireLock(); } @@ -462,7 +462,7 @@ PyOS_AfterFork_Parent(void) if (_PyImport_ReleaseLock() <= 0) Py_FatalError("failed releasing import lock after fork"); - run_at_forkers(_PyInterpreterState_GET_UNSAFE()->after_forkers_parent, 0); + run_at_forkers(_PyInterpreterState_GET()->after_forkers_parent, 0); } void @@ -476,7 +476,7 @@ PyOS_AfterFork_Child(void) _PyRuntimeState_ReInitThreads(runtime); _PyInterpreterState_DeleteExceptMain(runtime); - run_at_forkers(_PyInterpreterState_GET_UNSAFE()->after_forkers_child, 0); + run_at_forkers(_PyInterpreterState_GET()->after_forkers_child, 0); } static int @@ -6185,7 +6185,7 @@ os_register_at_fork_impl(PyObject *module, PyObject *before, check_null_or_callable(after_in_parent, "after_in_parent")) { return NULL; } - interp = _PyInterpreterState_GET_UNSAFE(); + interp = _PyInterpreterState_GET(); if (register_at_forker(&interp->before_forkers, before)) { return NULL; @@ -6216,7 +6216,7 @@ os_fork1_impl(PyObject *module) { pid_t pid; - if (_PyInterpreterState_GET_UNSAFE() != PyInterpreterState_Main()) { + if (_PyInterpreterState_GET() != PyInterpreterState_Main()) { PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters"); return NULL; } @@ -6251,7 +6251,7 @@ os_fork_impl(PyObject *module) { pid_t pid; - if (_PyInterpreterState_GET_UNSAFE() != PyInterpreterState_Main()) { + if (_PyInterpreterState_GET() != PyInterpreterState_Main()) { PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters"); return NULL; } @@ -6859,7 +6859,7 @@ os_forkpty_impl(PyObject *module) int master_fd = -1; pid_t pid; - if (_PyInterpreterState_GET_UNSAFE() != PyInterpreterState_Main()) { + if (_PyInterpreterState_GET() != PyInterpreterState_Main()) { PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters"); return NULL; } diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index b089a80785b..ceb986bddcb 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -1784,7 +1784,7 @@ PyOS_FiniInterrupts(void) int PyOS_InterruptOccurred(void) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (!_Py_ThreadCanHandleSignals(interp)) { return 0; } @@ -1821,7 +1821,7 @@ _PySignal_AfterFork(void) int _PyOS_IsMainThread(void) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); return _Py_ThreadCanHandleSignals(interp); } diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 7cb72ceab44..da04af43a4a 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -6,7 +6,7 @@ #include "structmember.h" #include "pycore_code.h" #include "pycore_interp.h" // PyInterpreterState.co_extra_freefuncs -#include "pycore_pystate.h" // _PyInterpreterState_GET_UNSAFE() +#include "pycore_pystate.h" // _PyInterpreterState_GET() #include "pycore_tupleobject.h" #include "clinic/codeobject.c.h" @@ -555,7 +555,7 @@ code_dealloc(PyCodeObject *co) co->co_opcache_size = 0; if (co->co_extra != NULL) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); _PyCodeObjectExtra *co_extra = co->co_extra; for (Py_ssize_t i = 0; i < co_extra->ce_size; i++) { @@ -1074,7 +1074,7 @@ _PyCode_GetExtra(PyObject *code, Py_ssize_t index, void **extra) int _PyCode_SetExtra(PyObject *code, Py_ssize_t index, void *extra) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (!PyCode_Check(code) || index < 0 || index >= interp->co_extra_user_count) { diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index acb920a4c07..1f419ad0831 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -165,7 +165,7 @@ _add_methods_to_object(PyObject *module, PyObject *name, PyMethodDef *functions) PyObject * PyModule_Create2(struct PyModuleDef* module, int module_api_version) { - if (!_PyImport_IsInitialized(_PyInterpreterState_GET_UNSAFE())) { + if (!_PyImport_IsInitialized(_PyInterpreterState_GET())) { PyErr_SetString(PyExc_SystemError, "Python import machinery not initialized"); return NULL; @@ -684,7 +684,7 @@ module_dealloc(PyModuleObject *m) static PyObject * module_repr(PyModuleObject *m) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); return PyObject_CallMethod(interp->importlib, "_module_repr", "O", m); } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 938df24e1df..28ec8f10dcb 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -436,7 +436,7 @@ unicode_check_encoding_errors(const char *encoding, const char *errors) return 0; } - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); #ifndef Py_DEBUG /* In release mode, only check in development mode (-X dev) */ if (!_PyInterpreterState_GetConfig(interp)->dev_mode) { @@ -3615,7 +3615,7 @@ PyUnicode_EncodeLocale(PyObject *unicode, const char *errors) PyObject * PyUnicode_EncodeFSDefault(PyObject *unicode) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->fs_codec.utf8) { return unicode_encode_utf8(unicode, interp->fs_codec.error_handler, @@ -3851,7 +3851,7 @@ PyUnicode_DecodeFSDefault(const char *s) { PyObject* PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->fs_codec.utf8) { return unicode_decode_utf8(s, size, interp->fs_codec.error_handler, @@ -16009,7 +16009,7 @@ _PyUnicode_FiniEncodings(PyThreadState *tstate) int _PyUnicode_EnableLegacyWindowsFSEncoding(void) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); PyConfig *config = (PyConfig *)_PyInterpreterState_GetConfig(interp); /* Set the filesystem encoding to mbcs/replace (PEP 529) */ diff --git a/Parser/listnode.c b/Parser/listnode.c index f53b265efe6..3bcc03e9352 100644 --- a/Parser/listnode.c +++ b/Parser/listnode.c @@ -3,7 +3,7 @@ #include "Python.h" #include "pycore_interp.h" // PyInterpreterState.parser -#include "pycore_pystate.h" // _PyInterpreterState_GET_UNSAFE +#include "pycore_pystate.h" // _PyInterpreterState_GET #include "token.h" #include "node.h" @@ -20,7 +20,7 @@ PyNode_ListTree(node *n) static void listnode(FILE *fp, node *n) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); interp->parser.listnode.level = 0; interp->parser.listnode.atbol = 1; @@ -40,7 +40,7 @@ list1node(FILE *fp, node *n) list1node(fp, CHILD(n, i)); } else if (ISTERMINAL(TYPE(n))) { - interp = _PyInterpreterState_GET_UNSAFE(); + interp = _PyInterpreterState_GET(); switch (TYPE(n)) { case INDENT: interp->parser.listnode.level++; diff --git a/Python/_warnings.c b/Python/_warnings.c index d005f12910b..0236cabdf11 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -212,7 +212,7 @@ get_warnings_attr(_Py_Identifier *attr_id, int try_import) gone, then we can't even use PyImport_GetModule without triggering an interpreter abort. */ - if (!_PyInterpreterState_GET_UNSAFE()->modules) { + if (!_PyInterpreterState_GET()->modules) { return NULL; } warnings_module = PyImport_GetModule(warnings_str); @@ -840,7 +840,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, } if (f == NULL) { - globals = _PyInterpreterState_GET_UNSAFE()->sysdict; + globals = _PyInterpreterState_GET()->sysdict; *filename = PyUnicode_FromString("sys"); *lineno = 1; } diff --git a/Python/ceval.c b/Python/ceval.c index b7129201593..fc720b4ba40 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -5562,7 +5562,7 @@ _Py_GetDXProfile(PyObject *self, PyObject *args) Py_ssize_t _PyEval_RequestCodeExtraIndex(freefunc free) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); Py_ssize_t new_index; if (interp->co_extra_user_count == MAX_CO_EXTRA_USERS - 1) { diff --git a/Python/codecs.c b/Python/codecs.c index 66919856ced..32cc110d8ec 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -33,7 +33,7 @@ static int _PyCodecRegistry_Init(void); /* Forward */ int PyCodec_Register(PyObject *search_function) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) goto onError; if (search_function == NULL) { @@ -105,7 +105,7 @@ PyObject *_PyCodec_Lookup(const char *encoding) return NULL; } - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) { return NULL; } @@ -188,7 +188,7 @@ int _PyCodec_Forget(const char *encoding) PyObject *v; int result; - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->codec_search_path == NULL) { return -1; } @@ -621,7 +621,7 @@ PyObject *_PyCodec_DecodeText(PyObject *object, Return 0 on success, -1 on error */ int PyCodec_RegisterError(const char *name, PyObject *error) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) return -1; if (!PyCallable_Check(error)) { @@ -639,7 +639,7 @@ PyObject *PyCodec_LookupError(const char *name) { PyObject *handler = NULL; - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) return NULL; @@ -1491,7 +1491,7 @@ static int _PyCodecRegistry_Init(void) } }; - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); PyObject *mod; if (interp->codec_search_path != NULL) diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 223e0d03f68..082154dd91b 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -3,7 +3,7 @@ #include "Python.h" #include "pycore_interp.h" // _PyInterpreterState.dlopenflags -#include "pycore_pystate.h" // _PyInterpreterState_GET_UNSAFE() +#include "pycore_pystate.h" // _PyInterpreterState_GET() #include "importdl.h" #include @@ -95,7 +95,7 @@ _PyImport_FindSharedFuncptr(const char *prefix, } } - dlopenflags = _PyInterpreterState_GET_UNSAFE()->dlopenflags; + dlopenflags = _PyInterpreterState_GET()->dlopenflags; handle = dlopen(pathname, dlopenflags); diff --git a/Python/import.c b/Python/import.c index 3bf8fe0581e..042691d30b0 100644 --- a/Python/import.c +++ b/Python/import.c @@ -310,7 +310,7 @@ _PyImport_Fini2(void) PyObject * PyImport_GetModuleDict(void) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); if (interp->modules == NULL) { Py_FatalError("interpreter has no modules dictionary"); } @@ -644,7 +644,7 @@ long PyImport_GetMagicNumber(void) { long res; - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); PyObject *external, *pyc_magic; external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external"); @@ -980,7 +980,7 @@ PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, goto error; } else if (cpathobj != NULL) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); _Py_IDENTIFIER(_get_sourcefile); if (interp == NULL) { diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index c2a078163a3..ac0ea107bcf 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -2355,7 +2355,7 @@ Py_ExitStatusException(PyStatus status) /* For the atexit module. */ void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module) { - PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *is = _PyInterpreterState_GET(); /* Guard against API misuse (see bpo-17852) */ assert(is->pyexitfunc == NULL || is->pyexitfunc == func); diff --git a/Python/pystate.c b/Python/pystate.c index 3636dc9c047..65d46a2bb42 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -661,7 +661,7 @@ PyObject* PyState_FindModule(struct PyModuleDef* module) { Py_ssize_t index = module->m_base.m_index; - PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *state = _PyInterpreterState_GET(); PyObject *res; if (module->m_slots) { return NULL; diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 522d152994e..d1165e2b4d2 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -347,7 +347,7 @@ set_main_loader(PyObject *d, const char *filename, const char *loader_name) filename_obj = PyUnicode_DecodeFSDefault(filename); if (filename_obj == NULL) return -1; - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); bootstrap = PyObject_GetAttrString(interp->importlib, "_bootstrap_external"); if (bootstrap != NULL) { diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 814e4abad58..6b3a1c38b9d 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -847,7 +847,7 @@ static PyObject * sys_getfilesystemencoding_impl(PyObject *module) /*[clinic end generated code: output=1dc4bdbe9be44aa7 input=8475f8649b8c7d8c]*/ { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); const PyConfig *config = _PyInterpreterState_GetConfig(interp); return PyUnicode_FromWideChar(config->filesystem_encoding, -1); } @@ -862,7 +862,7 @@ static PyObject * sys_getfilesystemencodeerrors_impl(PyObject *module) /*[clinic end generated code: output=ba77b36bbf7c96f5 input=22a1e8365566f1e5]*/ { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); + PyInterpreterState *interp = _PyInterpreterState_GET(); const PyConfig *config = _PyInterpreterState_GetConfig(interp); return PyUnicode_FromWideChar(config->filesystem_errors, -1); } diff --git a/Python/thread.c b/Python/thread.c index ec6909c41b8..bac0e6992ae 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -92,7 +92,7 @@ PyThread_init_thread(void) size_t PyThread_get_stacksize(void) { - return _PyInterpreterState_GET_UNSAFE()->pythread_stacksize; + return _PyInterpreterState_GET()->pythread_stacksize; } /* Only platforms defining a THREAD_SET_STACKSIZE() macro diff --git a/Python/thread_nt.h b/Python/thread_nt.h index e4bd0f70581..05b982d32dc 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -359,13 +359,13 @@ _pythread_nt_set_stacksize(size_t size) { /* set to default */ if (size == 0) { - _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0; + _PyInterpreterState_GET()->pythread_stacksize = 0; return 0; } /* valid range? */ if (size >= THREAD_MIN_STACKSIZE && size < THREAD_MAX_STACKSIZE) { - _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = size; + _PyInterpreterState_GET()->pythread_stacksize = size; return 0; } diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index 440d845312a..cf4e854d829 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -735,7 +735,7 @@ _pythread_pthread_set_stacksize(size_t size) /* set to default */ if (size == 0) { - _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0; + _PyInterpreterState_GET()->pythread_stacksize = 0; return 0; } @@ -752,7 +752,7 @@ _pythread_pthread_set_stacksize(size_t size) rc = pthread_attr_setstacksize(&attrs, size); pthread_attr_destroy(&attrs); if (rc == 0) { - _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = size; + _PyInterpreterState_GET()->pythread_stacksize = size; return 0; } }