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
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;
}
{
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) {
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;
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);
}
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)
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);
void
PyOS_BeforeFork(void)
{
- run_at_forkers(_PyInterpreterState_GET_UNSAFE()->before_forkers, 1);
+ run_at_forkers(_PyInterpreterState_GET()->before_forkers, 1);
_PyImport_AcquireLock();
}
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
_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
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;
{
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;
}
{
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;
}
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;
}
int
PyOS_InterruptOccurred(void)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (!_Py_ThreadCanHandleSignals(interp)) {
return 0;
}
int
_PyOS_IsMainThread(void)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
return _Py_ThreadCanHandleSignals(interp);
}
#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"
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++) {
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) {
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;
static PyObject *
module_repr(PyModuleObject *m)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
return PyObject_CallMethod(interp->importlib, "_module_repr", "O", m);
}
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) {
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,
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,
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) */
#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"
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;
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++;
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);
}
if (f == NULL) {
- globals = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ globals = _PyInterpreterState_GET()->sysdict;
*filename = PyUnicode_FromString("sys");
*lineno = 1;
}
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) {
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) {
return NULL;
}
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) {
return NULL;
}
PyObject *v;
int result;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL) {
return -1;
}
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)) {
{
PyObject *handler = NULL;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
return NULL;
}
};
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
PyObject *mod;
if (interp->codec_search_path != NULL)
#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 <sys/types.h>
}
}
- dlopenflags = _PyInterpreterState_GET_UNSAFE()->dlopenflags;
+ dlopenflags = _PyInterpreterState_GET()->dlopenflags;
handle = dlopen(pathname, dlopenflags);
PyObject *
PyImport_GetModuleDict(void)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->modules == NULL) {
Py_FatalError("interpreter has no modules dictionary");
}
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");
goto error;
}
else if (cpathobj != NULL) {
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
_Py_IDENTIFIER(_get_sourcefile);
if (interp == NULL) {
/* 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);
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;
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) {
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);
}
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);
}
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
{
/* 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;
}
/* set to default */
if (size == 0) {
- _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0;
+ _PyInterpreterState_GET()->pythread_stacksize = 0;
return 0;
}
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;
}
}