diff options
author | Barry Warsaw <barry@python.org> | 2008-05-08 04:26:35 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2008-05-08 04:26:35 (GMT) |
commit | 8d109cb0436e76448b2a413833bc867d490f6cca (patch) | |
tree | 7ff951c058bec95c594c0aba1e672de710324dd6 /Python | |
parent | 96de30ae1eba0fb126c8bef8b2fcfba1d5b34290 (diff) | |
download | cpython-8d109cb0436e76448b2a413833bc867d490f6cca.zip cpython-8d109cb0436e76448b2a413833bc867d490f6cca.tar.gz cpython-8d109cb0436e76448b2a413833bc867d490f6cca.tar.bz2 |
Antoine Pitrou's patch for bug 2507; exception state lives too long in
3.0.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index bac8278..defd002 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1477,6 +1477,19 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) "'finally' pops bad exception"); why = WHY_EXCEPTION; } + /* + Make sure the exception state is cleaned up before + the end of an except block. This ensures objects + referenced by the exception state are not kept + alive too long. + See #2507. + */ + if (tstate->frame->f_exc_type != NULL) + reset_exc_info(tstate); + else { + assert(tstate->frame->f_exc_value == NULL); + assert(tstate->frame->f_exc_traceback == NULL); + } Py_DECREF(v); break; |