aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Objects/frameobject.c
diff options
context:
space:
mode:
authorTian Gao <gaogaotiantian@hotmail.com>2023-11-03 09:39:50 -0700
committerGitHub <noreply@github.com>2023-11-03 16:39:50 +0000
commite0afed7e276b6611a2142ec70a0440298d528305 (patch)
tree9170a4828e2961750e84251115ee5ac91f31f31e /Objects/frameobject.c
parent2bc01cc0c72a3d91bdcce09886efa987a90396d9 (diff)
downloadcpython-e0afed7e276b6611a2142ec70a0440298d528305.tar.gz
cpython-e0afed7e276b6611a2142ec70a0440298d528305.zip
gh-103615: Use local events for opcode tracing (GH-109472)
* Use local monitoring for opcode trace * Remove f_opcode_trace_set * Add test for setting f_trace_opcodes after settrace
Diffstat (limited to 'Objects/frameobject.c')
-rw-r--r--Objects/frameobject.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 170c1177069..3b72651a1c0 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -127,10 +127,13 @@ frame_settrace_opcodes(PyFrameObject *f, PyObject* value, void *Py_UNUSED(ignore
}
if (value == Py_True) {
f->f_trace_opcodes = 1;
- _PyInterpreterState_GET()->f_opcode_trace_set = true;
+ if (f->f_trace) {
+ return _PyEval_SetOpcodeTrace(f, true);
+ }
}
else {
f->f_trace_opcodes = 0;
+ return _PyEval_SetOpcodeTrace(f, false);
}
return 0;
}
@@ -842,6 +845,9 @@ frame_settrace(PyFrameObject *f, PyObject* v, void *closure)
}
if (v != f->f_trace) {
Py_XSETREF(f->f_trace, Py_XNewRef(v));
+ if (v != NULL && f->f_trace_opcodes) {
+ return _PyEval_SetOpcodeTrace(f, true);
+ }
}
return 0;
}