Xavier de Gaye added the comment:
> out can be b'Done.\r\n'. Use self.assertIn.
Ok, new patch attached.
>> 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.
> You can test err for warning message.
In the case where PyExc_RecursionErrorInst would not leak frames, the code path
followed by the test case would not run any of the changes made in _warnings.c.
> The traceback should be cleared before decrementing the reference count. And
> only if Py_REFCNT(v) is 2.
I believe that attempting to fix the frames leak by clearing the traceback
implies the following changes:
* The previous patch to PyErr_PrintEx()
* v->context and v->cause should also be tested against equality with
PyExc_RecursionErrorInst.
* In PyErr_PrintEx() the variable v2 may also be PyExc_RecursionErrorInst.
* The sames change should also be done when freeing the exception value at
least:
in PyErr_WriteUnraisable() called when an exception occurs during
finalization
in PyErr_Restore()
[1] when sys.last_value is cleared in PyImport_Cleanup()
And that would miss the case [1] where sys.last_value is set to None by some
python user code.
Note [1]:
Unless it is acceptable to clear the PyExc_RecursionErrorInst traceback even
when sys.last_value has been set (then Py_REFCNT(v) is 3 instead of 2).
Not sure if this is worth the trouble.
----------
Added file: http://bugs.python.org/file37289/warn_5.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