diff options
| author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2024-05-21 20:42:51 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-21 20:42:51 (GMT) |
| commit | 6e9863d7a3516cc76d6ce13923b15620499f3855 (patch) | |
| tree | 06894f78bbed5cb71c0180e1f9355939a622d7a4 /Python/ceval.c | |
| parent | b64182550f73e556344bd754d32e3be5d22a74e1 (diff) | |
| download | cpython-6e9863d7a3516cc76d6ce13923b15620499f3855.zip cpython-6e9863d7a3516cc76d6ce13923b15620499f3855.tar.gz cpython-6e9863d7a3516cc76d6ce13923b15620499f3855.tar.bz2 | |
gh-118692: Avoid creating unnecessary StopIteration instances for monitoring (#119216)
Diffstat (limited to 'Python/ceval.c')
| -rw-r--r-- | Python/ceval.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 128e041..324d062 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -231,7 +231,8 @@ static void monitor_reraise(PyThreadState *tstate, _Py_CODEUNIT *instr); static int monitor_stop_iteration(PyThreadState *tstate, _PyInterpreterFrame *frame, - _Py_CODEUNIT *instr); + _Py_CODEUNIT *instr, + PyObject *value); static void monitor_unwind(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr); @@ -2215,12 +2216,19 @@ monitor_reraise(PyThreadState *tstate, _PyInterpreterFrame *frame, static int monitor_stop_iteration(PyThreadState *tstate, _PyInterpreterFrame *frame, - _Py_CODEUNIT *instr) + _Py_CODEUNIT *instr, PyObject *value) { if (no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_STOP_ITERATION)) { return 0; } - return do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_STOP_ITERATION); + assert(!PyErr_Occurred()); + PyErr_SetObject(PyExc_StopIteration, value); + int res = do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_STOP_ITERATION); + if (res < 0) { + return res; + } + PyErr_SetRaisedException(NULL); + return 0; } static void |
