summaryrefslogtreecommitdiffstats
path: root/Python/errors.c
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-04-11 21:24:37 (GMT)
committerGeorg Brandl <georg@python.org>2009-04-11 21:24:37 (GMT)
commit406b3d89e2ba94d013309884ba6fb9cb69ec5a75 (patch)
tree31a5a61aa37a1932ed0b2aac1798d323f2b17f67 /Python/errors.c
parent3f96a8790260ac0af552684c11105923cfe8012b (diff)
downloadcpython-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.c10
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);