Skip to content

Release references in unused heap slots after Pop - #62

Merged
zyedidia merged 1 commit into
zyedidia:masterfrom
ac1982:fix/release-popped-heap-values
Oct 12, 2026
Merged

zyedidia merged 1 commit into
zyedidia:masterfrom
ac1982:fix/release-popped-heap-values

Conversation

@ac1982

@ac1982 ac1982 commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Popping pointer values leaves references in the heap's unused backing-array slots, keeping objects alive even after the heap is empty. In a public-API reproduction that pushes 512 objects containing 64 KiB payloads, drains the heap, and forces GC while keeping the heap alive, retained HeapAlloc was 11,138,048 bytes before the fix and 5,008 bytes afterward on this machine.

Zero the vacated slot before shortening the slice. The regression uses the documented shared storage of FromSlice to verify released references deterministically, alongside pop ordering and reuse after draining. It fails before the change. The comparison above is an illustrative local allocation measurement, not a cross-platform benchmark.

Validation: full race tests, vet and Staticcheck 2026.2.1 on Go 1.27.1; full tests on CI's Go 1.19.13 series; formatting and diff checks pass. Historical Staticcheck 2022.1.1 was not run. AI-assisted implementation and validation.

@zyedidia
zyedidia merged commit 166f3f6 into zyedidia:master Oct 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants