mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
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. ........
This commit is contained in:
parent
3f96a87902
commit
406b3d89e2
2 changed files with 12 additions and 1 deletions
|
@ -47,6 +47,9 @@ Core and Builtins
|
||||||
- Issue #5499: The 'c' code for argument parsing functions now only accepts a
|
- Issue #5499: The 'c' code for argument parsing functions now only accepts a
|
||||||
byte, and the 'C' code only accepts a unicode character.
|
byte, and the 'C' code only accepts a unicode character.
|
||||||
|
|
||||||
|
- Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
|
||||||
|
when hitting the recursion limit under certain circumstances.
|
||||||
|
|
||||||
- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.
|
- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.
|
||||||
|
|
||||||
- Fix a segfault when running test_exceptions with coverage, caused by
|
- Fix a segfault when running test_exceptions with coverage, caused by
|
||||||
|
|
|
@ -279,7 +279,15 @@ finally:
|
||||||
tstate = PyThreadState_GET();
|
tstate = PyThreadState_GET();
|
||||||
if (++tstate->recursion_depth > Py_GetRecursionLimit()) {
|
if (++tstate->recursion_depth > Py_GetRecursionLimit()) {
|
||||||
--tstate->recursion_depth;
|
--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;
|
return;
|
||||||
}
|
}
|
||||||
PyErr_NormalizeException(exc, val, tb);
|
PyErr_NormalizeException(exc, val, tb);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue