Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
By storing previously raised exceptions inside a local, this code created ref cycles that kept all locals in all calling stack frames alive. This is because exceptions hold references to their tracebacks, which hold references to the relevant frames, which holds a reference to the local errors dict that holds references to the exceptions. See https://peps.python.org/pep-0344/#open-issue-garbage-collection and https://peps.python.org/pep-3110/#rationale This breaks the cycle by deleting the local when we raise, so frames are destroyed by the normal reference counting mechanism. This fixes some resource exhaustion issues I encountered at work.
- Loading branch information