mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-43760: Speed up check for tracing in interpreter dispatch (#25276)
* Remove redundant tracing_possible field from interpreter state. * Move 'use_tracing' from tstate onto C stack, for fastest possible checking in dispatch logic. * Add comments stressing the importance stack discipline when dealing with CFrames. * Add NEWS
This commit is contained in:
parent
c2b7a66b91
commit
9e7b2076fb
6 changed files with 61 additions and 35 deletions
|
@ -252,7 +252,7 @@ sys_audit_tstate(PyThreadState *ts, const char *event,
|
|||
|
||||
/* Disallow tracing in hooks unless explicitly enabled */
|
||||
ts->tracing++;
|
||||
ts->use_tracing = 0;
|
||||
ts->cframe->use_tracing = 0;
|
||||
while ((hook = PyIter_Next(hooks)) != NULL) {
|
||||
_Py_IDENTIFIER(__cantrace__);
|
||||
PyObject *o;
|
||||
|
@ -265,14 +265,14 @@ sys_audit_tstate(PyThreadState *ts, const char *event,
|
|||
break;
|
||||
}
|
||||
if (canTrace) {
|
||||
ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
|
||||
ts->cframe->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
|
||||
ts->tracing--;
|
||||
}
|
||||
PyObject* args[2] = {eventName, eventArgs};
|
||||
o = _PyObject_FastCallTstate(ts, hook, args, 2);
|
||||
if (canTrace) {
|
||||
ts->tracing++;
|
||||
ts->use_tracing = 0;
|
||||
ts->cframe->use_tracing = 0;
|
||||
}
|
||||
if (!o) {
|
||||
break;
|
||||
|
@ -280,7 +280,7 @@ sys_audit_tstate(PyThreadState *ts, const char *event,
|
|||
Py_DECREF(o);
|
||||
Py_CLEAR(hook);
|
||||
}
|
||||
ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
|
||||
ts->cframe->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
|
||||
ts->tracing--;
|
||||
if (_PyErr_Occurred(ts)) {
|
||||
goto exit;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue