Xavier de Gaye added the comment:
> Why recursion limit is restored? Couldn't the test be simpler without it?
For the sake of explicitness, so that the interpreter will not raise a
RuntimeError during finalization when checking for the recursion limit after
g.throw(MyException) has raised PyExc_RecursionErrorInst.
> %a should be used instead of '%s' (file path can contain backslashes).
> And it would be more robust to open file in binary mode (may be even in
> non-buffered). It can contain non-ascii characters.
> May be the test should be marked as CPython only.
> To check that script is executed at all we should print something from it and
> than test the out. Otherwise syntax error in script will make all test passed.
Thanks.
New patch attached.
The reason why the PyExc_RecursionErrorInst singleton keeps the frames alive
longer than expected is that the reference count of the
PyExc_RecursionErrorInst static variable never reaches zero until
_PyExc_Fini(). So decrementing the reference count of this exception after the
traceback has been printed in PyErr_PrintEx() does not decrement the reference
count of its traceback attribute (as it is the case with the other exceptions)
and the traceback is not freed. The following patch to PyErr_PrintEx() does
that. With this new patch and without the changes made by warn_4.patch, the
interpreter does not crash with the runtimerror_singleton_2.py reproducer and
the ResourceWarning is now printed instead of being ignored as with the
warn_4.patch:
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1876,6 +1876,8 @@
PyErr_Display(exception, v, tb);
}
Py_XDECREF(exception);
+ if (v == PyExc_RecursionErrorInst)
+ Py_CLEAR(((PyBaseExceptionObject *)v)->traceback);
Py_XDECREF(v);
Py_XDECREF(tb);
}
If both patches were to be included, the test case in warn_4.patch would test
the above patch and not the changes made in Python/_warnings.c.
----------
Added file: http://bugs.python.org/file37288/warn_4.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue22898>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com