mirror of
https://github.com/python/cpython.git
synced 2025-07-15 23:35:23 +00:00
gh-110892: Return NULL for PyTrace_RETURN
events caused by an exception (GH-110909)
This commit is contained in:
parent
0887b9ce8b
commit
f4b5588bde
3 changed files with 49 additions and 23 deletions
|
@ -46,7 +46,7 @@ call_profile_func(_PyLegacyEventHandler *self, PyObject *arg)
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
sys_profile_func2(
|
||||
sys_profile_start(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames
|
||||
) {
|
||||
|
@ -56,7 +56,17 @@ sys_profile_func2(
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
sys_profile_func3(
|
||||
sys_profile_throw(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames
|
||||
) {
|
||||
assert(kwnames == NULL);
|
||||
assert(PyVectorcall_NARGS(nargsf) == 3);
|
||||
return call_profile_func(self, Py_None);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sys_profile_return(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames
|
||||
) {
|
||||
|
@ -72,7 +82,7 @@ sys_profile_unwind(
|
|||
) {
|
||||
assert(kwnames == NULL);
|
||||
assert(PyVectorcall_NARGS(nargsf) == 3);
|
||||
return call_profile_func(self, Py_None);
|
||||
return call_profile_func(self, NULL);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
@ -154,7 +164,7 @@ sys_trace_exception_func(
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
sys_trace_func2(
|
||||
sys_trace_start(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames
|
||||
) {
|
||||
|
@ -164,7 +174,7 @@ sys_trace_func2(
|
|||
}
|
||||
|
||||
static PyObject *
|
||||
sys_trace_func3(
|
||||
sys_trace_throw(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames
|
||||
) {
|
||||
|
@ -173,6 +183,16 @@ sys_trace_func3(
|
|||
return call_trace_func(self, Py_None);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sys_trace_unwind(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
size_t nargsf, PyObject *kwnames
|
||||
) {
|
||||
assert(kwnames == NULL);
|
||||
assert(PyVectorcall_NARGS(nargsf) == 3);
|
||||
return call_trace_func(self, NULL);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
sys_trace_return(
|
||||
_PyLegacyEventHandler *self, PyObject *const *args,
|
||||
|
@ -373,17 +393,17 @@ _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
|
|||
if (!tstate->interp->sys_profile_initialized) {
|
||||
tstate->interp->sys_profile_initialized = true;
|
||||
if (set_callbacks(PY_MONITORING_SYS_PROFILE_ID,
|
||||
(vectorcallfunc)sys_profile_func2, PyTrace_CALL,
|
||||
(vectorcallfunc)sys_profile_start, PyTrace_CALL,
|
||||
PY_MONITORING_EVENT_PY_START, PY_MONITORING_EVENT_PY_RESUME)) {
|
||||
return -1;
|
||||
}
|
||||
if (set_callbacks(PY_MONITORING_SYS_PROFILE_ID,
|
||||
(vectorcallfunc)sys_profile_func3, PyTrace_CALL,
|
||||
(vectorcallfunc)sys_profile_throw, PyTrace_CALL,
|
||||
PY_MONITORING_EVENT_PY_THROW, -1)) {
|
||||
return -1;
|
||||
}
|
||||
if (set_callbacks(PY_MONITORING_SYS_PROFILE_ID,
|
||||
(vectorcallfunc)sys_profile_func3, PyTrace_RETURN,
|
||||
(vectorcallfunc)sys_profile_return, PyTrace_RETURN,
|
||||
PY_MONITORING_EVENT_PY_RETURN, PY_MONITORING_EVENT_PY_YIELD)) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -447,12 +467,12 @@ _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
|
|||
if (!tstate->interp->sys_trace_initialized) {
|
||||
tstate->interp->sys_trace_initialized = true;
|
||||
if (set_callbacks(PY_MONITORING_SYS_TRACE_ID,
|
||||
(vectorcallfunc)sys_trace_func2, PyTrace_CALL,
|
||||
(vectorcallfunc)sys_trace_start, PyTrace_CALL,
|
||||
PY_MONITORING_EVENT_PY_START, PY_MONITORING_EVENT_PY_RESUME)) {
|
||||
return -1;
|
||||
}
|
||||
if (set_callbacks(PY_MONITORING_SYS_TRACE_ID,
|
||||
(vectorcallfunc)sys_trace_func3, PyTrace_CALL,
|
||||
(vectorcallfunc)sys_trace_throw, PyTrace_CALL,
|
||||
PY_MONITORING_EVENT_PY_THROW, -1)) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -477,7 +497,7 @@ _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
|
|||
return -1;
|
||||
}
|
||||
if (set_callbacks(PY_MONITORING_SYS_TRACE_ID,
|
||||
(vectorcallfunc)sys_trace_func3, PyTrace_RETURN,
|
||||
(vectorcallfunc)sys_trace_unwind, PyTrace_RETURN,
|
||||
PY_MONITORING_EVENT_PY_UNWIND, -1)) {
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue