diff options
author | Georg Brandl <georg@python.org> | 2009-04-11 21:24:37 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-04-11 21:24:37 (GMT) |
commit | 406b3d89e2ba94d013309884ba6fb9cb69ec5a75 (patch) | |
tree | 31a5a61aa37a1932ed0b2aac1798d323f2b17f67 /Python/errors.c | |
parent | 3f96a8790260ac0af552684c11105923cfe8012b (diff) | |
download | cpython-406b3d89e2ba94d013309884ba6fb9cb69ec5a75.zip cpython-406b3d89e2ba94d013309884ba6fb9cb69ec5a75.tar.gz cpython-406b3d89e2ba94d013309884ba6fb9cb69ec5a75.tar.bz2 |
Merged revisions 71024,71058 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r71024 | georg.brandl | 2009-04-02 04:47:44 +0200 (Do, 02 Apr 2009) | 4 lines
In PyErr_GivenExceptionMatches, temporarily bump the recursion
limit, so that in the most common case PyObject_IsSubclass will
not raise a recursion error we have to ignore anyway.
........
r71058 | georg.brandl | 2009-04-02 20:09:04 +0200 (Do, 02 Apr 2009) | 3 lines
PyErr_NormalizeException may not set an error, so convert the PyErr_SetObject
call on hitting the recursion limit into just assigning it to the arguments provided.
........
Diffstat (limited to 'Python/errors.c')
-rw-r--r-- | Python/errors.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Python/errors.c b/Python/errors.c index 6335388..cccc0f7 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -279,7 +279,15 @@ finally: tstate = PyThreadState_GET(); if (++tstate->recursion_depth > Py_GetRecursionLimit()) { --tstate->recursion_depth; - PyErr_SetObject(PyExc_RuntimeError, PyExc_RecursionErrorInst); + /* throw away the old exception... */ + Py_DECREF(*exc); + Py_DECREF(*val); + /* ... and use the recursion error instead */ + *exc = PyExc_RuntimeError; + *val = PyExc_RecursionErrorInst; + Py_INCREF(*exc); + Py_INCREF(*val); + /* just keeping the old traceback */ return; } PyErr_NormalizeException(exc, val, tb); |