Skip to content

Dynamic borrow checking for stackrefs #131527

@mpage

Description

@mpage

Feature or enhancement

Proposal:

#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

Links to previous discussion of this feature:

No response

Metadata

Metadata

Assignees

Labels

interpreter-core(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancement

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions