[embedded] Fix a memory leak caused by incorrect refcounting logic around doNotFreeBit #77121
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Looks like we had a major memory leak caused by the changes from #76231. We can't set the refcount to
HeapObject.immortalRefCount
(0xffff_ffff) because that (accidentally) also includesHeapObject.doNotFreeBit
(0x8000_000). Let's separate the two -- immortalRefCount is now only 0x7fff_ffff and the highest bit is used as a doNotFreeBit regardless of whether the refcount is immortal or not.Fixes #76998