mirror of
https://github.com/python/cpython.git
synced 2025-07-13 22:35:18 +00:00
[3.12] gh-122029: Log call events in sys.setprofile when it's a method with c function (GH-122072) (GH-122206)
gh-122029: Log call events in sys.setprofile when it's a method with c function (GH-122072)
Log call events in sys.setprofile when it is a method with a C function.
(cherry picked from commit e91ef13861
)
Co-authored-by: Tian Gao <gaogaotiantian@hotmail.com>
This commit is contained in:
parent
d7c67e0aca
commit
257c413cd1
3 changed files with 28 additions and 0 deletions
|
@ -103,6 +103,19 @@ sys_profile_call_or_return(
|
|||
Py_DECREF(meth);
|
||||
return res;
|
||||
}
|
||||
else if (Py_TYPE(callable) == &PyMethod_Type) {
|
||||
// CALL instruction will grab the function from the method,
|
||||
// so if the function is a C function, the return event will
|
||||
// be emitted. However, CALL event happens before CALL
|
||||
// instruction, so we need to handle this case here.
|
||||
PyObject* func = PyMethod_GET_FUNCTION(callable);
|
||||
if (func == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
if (PyCFunction_Check(func)) {
|
||||
return call_profile_func(self, func);
|
||||
}
|
||||
}
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue