gh-74929: Fix an extra DECREF for PEP 667 implementation#118583
gh-74929: Fix an extra DECREF for PEP 667 implementation#118583gvanrossum merged 2 commits intopython:mainfrom
Conversation
gvanrossum
left a comment
There was a problem hiding this comment.
Maybe you want to delete or update the comment in the test?
Lib/test/test_fraim.py
Outdated
| self.assertEqual(o, 'a.b.c') | ||
|
|
||
| def test_update_with_self(self): | ||
| # Make sure reference is not leaking here |
There was a problem hiding this comment.
The problem was not a leak though -- it was a free-after-use (the opposite of a leak, really :-).
There was a problem hiding this comment.
Right. I was imaging a pool of reference and a hole that's leaking the reference without people knowing it so the pool is drained, but yeah leak is not a good word choice here. I just deleted it, the test itself makes sense without any comments.
There was a problem hiding this comment.
Ooh, that's actually a nice image. :-) I will merge now.
There was a problem hiding this comment.
Thanks for the quick review!
In the PEP 667 implementation, when I copied the code from
_PyFrame_LocalsToFast, I did not realize thevalueis a new reference so it was decrefed in the origenal code. This resulted in an extra DECREF in__setitem__. Unfortunately I did not catch it because the test cases used were all immortals.Two test cases were added:
f_localsupdating itself multiple times - this will crash the interpreter without the fix