mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
bpo-38644: Use _PySys_Audit(): pass tstate explicitly (GH-19183)
Add the dependency to tstate more explicit.
This commit is contained in:
parent
33f15a16d4
commit
1c1e68cf3e
4 changed files with 31 additions and 25 deletions
|
@ -18,6 +18,7 @@
|
||||||
#include "pycore_pyerrors.h"
|
#include "pycore_pyerrors.h"
|
||||||
#include "pycore_pylifecycle.h"
|
#include "pycore_pylifecycle.h"
|
||||||
#include "pycore_pystate.h"
|
#include "pycore_pystate.h"
|
||||||
|
#include "pycore_sysmodule.h"
|
||||||
#include "pycore_tupleobject.h"
|
#include "pycore_tupleobject.h"
|
||||||
|
|
||||||
#include "code.h"
|
#include "code.h"
|
||||||
|
@ -4693,9 +4694,10 @@ _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
|
||||||
/* The caller must hold the GIL */
|
/* The caller must hold the GIL */
|
||||||
assert(PyGILState_Check());
|
assert(PyGILState_Check());
|
||||||
|
|
||||||
/* Call PySys_Audit() in the context of the current thread state,
|
/* Call _PySys_Audit() in the context of the current thread state,
|
||||||
even if tstate is not the current thread state. */
|
even if tstate is not the current thread state. */
|
||||||
if (PySys_Audit("sys.setprofile", NULL) < 0) {
|
PyThreadState *current_tstate = _PyThreadState_GET();
|
||||||
|
if (_PySys_Audit(current_tstate, "sys.setprofile", NULL) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4721,7 +4723,7 @@ PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
if (_PyEval_SetProfile(tstate, func, arg) < 0) {
|
if (_PyEval_SetProfile(tstate, func, arg) < 0) {
|
||||||
/* Log PySys_Audit() error */
|
/* Log _PySys_Audit() error */
|
||||||
_PyErr_WriteUnraisableMsg("in PyEval_SetProfile", NULL);
|
_PyErr_WriteUnraisableMsg("in PyEval_SetProfile", NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4733,9 +4735,10 @@ _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
|
||||||
/* The caller must hold the GIL */
|
/* The caller must hold the GIL */
|
||||||
assert(PyGILState_Check());
|
assert(PyGILState_Check());
|
||||||
|
|
||||||
/* Call PySys_Audit() in the context of the current thread state,
|
/* Call _PySys_Audit() in the context of the current thread state,
|
||||||
even if tstate is not the current thread state. */
|
even if tstate is not the current thread state. */
|
||||||
if (PySys_Audit("sys.settrace", NULL) < 0) {
|
PyThreadState *current_tstate = _PyThreadState_GET();
|
||||||
|
if (_PySys_Audit(current_tstate, "sys.settrace", NULL) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4765,7 +4768,7 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
if (_PyEval_SetTrace(tstate, func, arg) < 0) {
|
if (_PyEval_SetTrace(tstate, func, arg) < 0) {
|
||||||
/* Log PySys_Audit() error */
|
/* Log _PySys_Audit() error */
|
||||||
_PyErr_WriteUnraisableMsg("in PyEval_SetTrace", NULL);
|
_PyErr_WriteUnraisableMsg("in PyEval_SetTrace", NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4790,7 +4793,7 @@ _PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
|
|
||||||
if (PySys_Audit("sys.set_asyncgen_hook_firstiter", NULL) < 0) {
|
if (_PySys_Audit(tstate, "sys.set_asyncgen_hook_firstiter", NULL) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4811,7 +4814,7 @@ _PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
|
|
||||||
if (PySys_Audit("sys.set_asyncgen_hook_finalizer", NULL) < 0) {
|
if (_PySys_Audit(tstate, "sys.set_asyncgen_hook_finalizer", NULL) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "pycore_initconfig.h"
|
#include "pycore_initconfig.h"
|
||||||
#include "pycore_pyerrors.h"
|
#include "pycore_pyerrors.h"
|
||||||
#include "pycore_pystate.h"
|
#include "pycore_pystate.h"
|
||||||
|
#include "pycore_sysmodule.h"
|
||||||
#include "pycore_traceback.h"
|
#include "pycore_traceback.h"
|
||||||
|
|
||||||
#ifndef __STDC__
|
#ifndef __STDC__
|
||||||
|
@ -1410,7 +1411,7 @@ _PyErr_WriteUnraisableMsg(const char *err_msg_str, PyObject *obj)
|
||||||
goto default_hook;
|
goto default_hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PySys_Audit("sys.unraisablehook", "OO", hook, hook_args) < 0) {
|
if (_PySys_Audit(tstate, "sys.unraisablehook", "OO", hook, hook_args) < 0) {
|
||||||
Py_DECREF(hook_args);
|
Py_DECREF(hook_args);
|
||||||
err_msg_str = "Exception ignored in audit hook";
|
err_msg_str = "Exception ignored in audit hook";
|
||||||
obj = NULL;
|
obj = NULL;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "pycore_pylifecycle.h"
|
#include "pycore_pylifecycle.h"
|
||||||
#include "pycore_pymem.h"
|
#include "pycore_pymem.h"
|
||||||
#include "pycore_pystate.h"
|
#include "pycore_pystate.h"
|
||||||
|
#include "pycore_sysmodule.h"
|
||||||
#include "errcode.h"
|
#include "errcode.h"
|
||||||
#include "marshal.h"
|
#include "marshal.h"
|
||||||
#include "code.h"
|
#include "code.h"
|
||||||
|
@ -1735,10 +1736,10 @@ import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
|
||||||
PyObject *sys_path = PySys_GetObject("path");
|
PyObject *sys_path = PySys_GetObject("path");
|
||||||
PyObject *sys_meta_path = PySys_GetObject("meta_path");
|
PyObject *sys_meta_path = PySys_GetObject("meta_path");
|
||||||
PyObject *sys_path_hooks = PySys_GetObject("path_hooks");
|
PyObject *sys_path_hooks = PySys_GetObject("path_hooks");
|
||||||
if (PySys_Audit("import", "OOOOO",
|
if (_PySys_Audit(tstate, "import", "OOOOO",
|
||||||
abs_name, Py_None, sys_path ? sys_path : Py_None,
|
abs_name, Py_None, sys_path ? sys_path : Py_None,
|
||||||
sys_meta_path ? sys_meta_path : Py_None,
|
sys_meta_path ? sys_meta_path : Py_None,
|
||||||
sys_path_hooks ? sys_path_hooks : Py_None) < 0) {
|
sys_path_hooks ? sys_path_hooks : Py_None) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "pycore_pyerrors.h"
|
#include "pycore_pyerrors.h"
|
||||||
#include "pycore_pylifecycle.h"
|
#include "pycore_pylifecycle.h"
|
||||||
#include "pycore_pystate.h"
|
#include "pycore_pystate.h"
|
||||||
|
#include "pycore_sysmodule.h"
|
||||||
#include "grammar.h"
|
#include "grammar.h"
|
||||||
#include "node.h"
|
#include "node.h"
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
|
@ -696,8 +697,8 @@ _PyErr_PrintEx(PyThreadState *tstate, int set_sys_last_vars)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hook = _PySys_GetObjectId(&PyId_excepthook);
|
hook = _PySys_GetObjectId(&PyId_excepthook);
|
||||||
if (PySys_Audit("sys.excepthook", "OOOO", hook ? hook : Py_None,
|
if (_PySys_Audit(tstate, "sys.excepthook", "OOOO", hook ? hook : Py_None,
|
||||||
exception, v, tb) < 0) {
|
exception, v, tb) < 0) {
|
||||||
if (PyErr_ExceptionMatches(PyExc_RuntimeError)) {
|
if (PyErr_ExceptionMatches(PyExc_RuntimeError)) {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -1100,7 +1101,7 @@ flush_io(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
run_eval_code_obj(PyCodeObject *co, PyObject *globals, PyObject *locals)
|
run_eval_code_obj(PyThreadState *tstate, PyCodeObject *co, PyObject *globals, PyObject *locals)
|
||||||
{
|
{
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
/*
|
/*
|
||||||
|
@ -1117,14 +1118,14 @@ run_eval_code_obj(PyCodeObject *co, PyObject *globals, PyObject *locals)
|
||||||
|
|
||||||
/* Set globals['__builtins__'] if it doesn't exist */
|
/* Set globals['__builtins__'] if it doesn't exist */
|
||||||
if (globals != NULL && PyDict_GetItemString(globals, "__builtins__") == NULL) {
|
if (globals != NULL && PyDict_GetItemString(globals, "__builtins__") == NULL) {
|
||||||
PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
|
if (PyDict_SetItemString(globals, "__builtins__",
|
||||||
if (PyDict_SetItemString(globals, "__builtins__", interp->builtins) < 0) {
|
tstate->interp->builtins) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
v = PyEval_EvalCode((PyObject*)co, globals, locals);
|
v = PyEval_EvalCode((PyObject*)co, globals, locals);
|
||||||
if (!v && PyErr_Occurred() == PyExc_KeyboardInterrupt) {
|
if (!v && _PyErr_Occurred(tstate) == PyExc_KeyboardInterrupt) {
|
||||||
_Py_UnhandledKeyboardInterrupt = 1;
|
_Py_UnhandledKeyboardInterrupt = 1;
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
|
@ -1134,18 +1135,17 @@ static PyObject *
|
||||||
run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
|
run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
|
||||||
PyCompilerFlags *flags, PyArena *arena)
|
PyCompilerFlags *flags, PyArena *arena)
|
||||||
{
|
{
|
||||||
PyCodeObject *co;
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
PyObject *v;
|
PyCodeObject *co = PyAST_CompileObject(mod, filename, flags, -1, arena);
|
||||||
co = PyAST_CompileObject(mod, filename, flags, -1, arena);
|
|
||||||
if (co == NULL)
|
if (co == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (PySys_Audit("exec", "O", co) < 0) {
|
if (_PySys_Audit(tstate, "exec", "O", co) < 0) {
|
||||||
Py_DECREF(co);
|
Py_DECREF(co);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
v = run_eval_code_obj(co, globals, locals);
|
PyObject *v = run_eval_code_obj(tstate, co, globals, locals);
|
||||||
Py_DECREF(co);
|
Py_DECREF(co);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
@ -1154,6 +1154,7 @@ static PyObject *
|
||||||
run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
|
run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
|
||||||
PyObject *locals, PyCompilerFlags *flags)
|
PyObject *locals, PyCompilerFlags *flags)
|
||||||
{
|
{
|
||||||
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
PyCodeObject *co;
|
PyCodeObject *co;
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
long magic;
|
long magic;
|
||||||
|
@ -1182,7 +1183,7 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
co = (PyCodeObject *)v;
|
co = (PyCodeObject *)v;
|
||||||
v = run_eval_code_obj(co, globals, locals);
|
v = run_eval_code_obj(tstate, co, globals, locals);
|
||||||
if (v && flags)
|
if (v && flags)
|
||||||
flags->cf_flags |= (co->co_flags & PyCF_MASK);
|
flags->cf_flags |= (co->co_flags & PyCF_MASK);
|
||||||
Py_DECREF(co);
|
Py_DECREF(co);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue