diff options
author | Victor Stinner <vstinner@python.org> | 2020-03-27 14:11:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-27 14:11:45 (GMT) |
commit | 1c1e68cf3e3a2a19a0edca9a105273e11ddddc6e (patch) | |
tree | 5ca84d927ab6ffa09308943075d056e604f3667b /Python | |
parent | 33f15a16d40cb8010a8c758952cbf88d7912ee2d (diff) | |
download | cpython-1c1e68cf3e3a2a19a0edca9a105273e11ddddc6e.zip cpython-1c1e68cf3e3a2a19a0edca9a105273e11ddddc6e.tar.gz cpython-1c1e68cf3e3a2a19a0edca9a105273e11ddddc6e.tar.bz2 |
bpo-38644: Use _PySys_Audit(): pass tstate explicitly (GH-19183)
Add the dependency to tstate more explicit.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 19 | ||||
-rw-r--r-- | Python/errors.c | 3 | ||||
-rw-r--r-- | Python/import.c | 9 | ||||
-rw-r--r-- | Python/pythonrun.c | 25 |
4 files changed, 31 insertions, 25 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 2be02a1..d79a239 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -18,6 +18,7 @@ #include "pycore_pyerrors.h" #include "pycore_pylifecycle.h" #include "pycore_pystate.h" +#include "pycore_sysmodule.h" #include "pycore_tupleobject.h" #include "code.h" @@ -4693,9 +4694,10 @@ _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) /* The caller must hold the GIL */ 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. */ - if (PySys_Audit("sys.setprofile", NULL) < 0) { + PyThreadState *current_tstate = _PyThreadState_GET(); + if (_PySys_Audit(current_tstate, "sys.setprofile", NULL) < 0) { return -1; } @@ -4721,7 +4723,7 @@ PyEval_SetProfile(Py_tracefunc func, PyObject *arg) { PyThreadState *tstate = _PyThreadState_GET(); if (_PyEval_SetProfile(tstate, func, arg) < 0) { - /* Log PySys_Audit() error */ + /* Log _PySys_Audit() error */ _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 */ 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. */ - if (PySys_Audit("sys.settrace", NULL) < 0) { + PyThreadState *current_tstate = _PyThreadState_GET(); + if (_PySys_Audit(current_tstate, "sys.settrace", NULL) < 0) { return -1; } @@ -4765,7 +4768,7 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg) { PyThreadState *tstate = _PyThreadState_GET(); if (_PyEval_SetTrace(tstate, func, arg) < 0) { - /* Log PySys_Audit() error */ + /* Log _PySys_Audit() error */ _PyErr_WriteUnraisableMsg("in PyEval_SetTrace", NULL); } } @@ -4790,7 +4793,7 @@ _PyEval_SetAsyncGenFirstiter(PyObject *firstiter) { 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; } @@ -4811,7 +4814,7 @@ _PyEval_SetAsyncGenFinalizer(PyObject *finalizer) { 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; } diff --git a/Python/errors.c b/Python/errors.c index 4656fb2..a2fe52b 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -5,6 +5,7 @@ #include "pycore_initconfig.h" #include "pycore_pyerrors.h" #include "pycore_pystate.h" +#include "pycore_sysmodule.h" #include "pycore_traceback.h" #ifndef __STDC__ @@ -1410,7 +1411,7 @@ _PyErr_WriteUnraisableMsg(const char *err_msg_str, PyObject *obj) 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); err_msg_str = "Exception ignored in audit hook"; obj = NULL; diff --git a/Python/import.c b/Python/import.c index 645ebdf..5d500df 100644 --- a/Python/import.c +++ b/Python/import.c @@ -10,6 +10,7 @@ #include "pycore_pylifecycle.h" #include "pycore_pymem.h" #include "pycore_pystate.h" +#include "pycore_sysmodule.h" #include "errcode.h" #include "marshal.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_meta_path = PySys_GetObject("meta_path"); PyObject *sys_path_hooks = PySys_GetObject("path_hooks"); - if (PySys_Audit("import", "OOOOO", - abs_name, Py_None, sys_path ? sys_path : Py_None, - sys_meta_path ? sys_meta_path : Py_None, - sys_path_hooks ? sys_path_hooks : Py_None) < 0) { + if (_PySys_Audit(tstate, "import", "OOOOO", + abs_name, Py_None, sys_path ? sys_path : Py_None, + sys_meta_path ? sys_meta_path : Py_None, + sys_path_hooks ? sys_path_hooks : Py_None) < 0) { return NULL; } diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 76bc48d..95571a8 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -16,6 +16,7 @@ #include "pycore_pyerrors.h" #include "pycore_pylifecycle.h" #include "pycore_pystate.h" +#include "pycore_sysmodule.h" #include "grammar.h" #include "node.h" #include "token.h" @@ -696,8 +697,8 @@ _PyErr_PrintEx(PyThreadState *tstate, int set_sys_last_vars) } } hook = _PySys_GetObjectId(&PyId_excepthook); - if (PySys_Audit("sys.excepthook", "OOOO", hook ? hook : Py_None, - exception, v, tb) < 0) { + if (_PySys_Audit(tstate, "sys.excepthook", "OOOO", hook ? hook : Py_None, + exception, v, tb) < 0) { if (PyErr_ExceptionMatches(PyExc_RuntimeError)) { PyErr_Clear(); goto done; @@ -1100,7 +1101,7 @@ flush_io(void) } 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; /* @@ -1117,14 +1118,14 @@ run_eval_code_obj(PyCodeObject *co, PyObject *globals, PyObject *locals) /* Set globals['__builtins__'] if it doesn't exist */ if (globals != NULL && PyDict_GetItemString(globals, "__builtins__") == NULL) { - PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); - if (PyDict_SetItemString(globals, "__builtins__", interp->builtins) < 0) { + if (PyDict_SetItemString(globals, "__builtins__", + tstate->interp->builtins) < 0) { return NULL; } } v = PyEval_EvalCode((PyObject*)co, globals, locals); - if (!v && PyErr_Occurred() == PyExc_KeyboardInterrupt) { + if (!v && _PyErr_Occurred(tstate) == PyExc_KeyboardInterrupt) { _Py_UnhandledKeyboardInterrupt = 1; } return v; @@ -1134,18 +1135,17 @@ static PyObject * run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals, PyCompilerFlags *flags, PyArena *arena) { - PyCodeObject *co; - PyObject *v; - co = PyAST_CompileObject(mod, filename, flags, -1, arena); + PyThreadState *tstate = _PyThreadState_GET(); + PyCodeObject *co = PyAST_CompileObject(mod, filename, flags, -1, arena); if (co == NULL) return NULL; - if (PySys_Audit("exec", "O", co) < 0) { + if (_PySys_Audit(tstate, "exec", "O", co) < 0) { Py_DECREF(co); return NULL; } - v = run_eval_code_obj(co, globals, locals); + PyObject *v = run_eval_code_obj(tstate, co, globals, locals); Py_DECREF(co); return v; } @@ -1154,6 +1154,7 @@ static PyObject * run_pyc_file(FILE *fp, const char *filename, PyObject *globals, PyObject *locals, PyCompilerFlags *flags) { + PyThreadState *tstate = _PyThreadState_GET(); PyCodeObject *co; PyObject *v; long magic; @@ -1182,7 +1183,7 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals, } fclose(fp); co = (PyCodeObject *)v; - v = run_eval_code_obj(co, globals, locals); + v = run_eval_code_obj(tstate, co, globals, locals); if (v && flags) flags->cf_flags |= (co->co_flags & PyCF_MASK); Py_DECREF(co); |