You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#130708 introduces stackrefs whose lifetime must be shorter than the lifetime of another stackref. We should verify this property in the debug build of stackrefs: warn anytime a stackref with outstanding borrowed references is closed.
Here is a sketch of a possible implementation:
Add a counter, borrows, to each stackref that records the number of borrows.
Add a borrowed_from field to each stackref that records the index of the stackref it was borrowed from, if any. This field is preserved by PyStackRef_DUP.
PyStackRef_Borrow(from) sets the the borrowed_from field on the returned stackref and increments the borrows field on from. We should follow chains of borrows until we reach the unborrowed reference at the head.
PyStackRef_CLOSE on a borrowed stackref decrements the borrows field on the borrowed-from stackref.
PyStackRef_CLOSE warns if borrows is non-zero.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
I've made a variant of borrow checking which is close to the sketch and it actually works. I've found one little issue with f_overwritten_fast_locals with it. But my implementation depends on #139475. So it seems to merge that PR first.
Activity
efimov-mikhail commentedon Oct 4, 2025
I've made a variant of borrow checking which is close to the sketch and it actually works. I've found one little issue with
f_overwritten_fast_localswith it. But my implementation depends on #139475. So it seems to merge that PR first.CC @markshannon
gh-131527: Stackref debug borrow checker (#140599)
pythongh-131527: Stackref debug borrow checker (python#140599)