diff options
author | Tian Gao <gaogaotiantian@hotmail.com> | 2023-11-03 09:39:50 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-03 16:39:50 +0000 |
commit | e0afed7e276b6611a2142ec70a0440298d528305 (patch) | |
tree | 9170a4828e2961750e84251115ee5ac91f31f31e /Objects/frameobject.c | |
parent | 2bc01cc0c72a3d91bdcce09886efa987a90396d9 (diff) | |
download | cpython-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.c | 8 |
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; } |