Adds code and documentation to rectify potential memory leaks in LinkedListAllocator #1182
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.
I am not sure if this was a design decision to keep things simple for the sake of the blog post implementation of the
LinkedListAllocator
, but the currentalloc_from_region
method can fail to keep track of free unused heap areas that are created due to misalignment between the freeregion
and the layout request.In x86_64, this can only happen if the layout request was for an alignment of 16 bytes and the
region
happened to start in the middle of this alignment, at some address16*n + 8
. The current behavior would "leak" the 8 bytes between16*n + 8
and16*(n+1)
and never attempt to reclaim those regions even upon deallocation.It seemed simple enough to ensure that we leave enough room in the beginning for at least another
ListNode
, following a similar approach in thelinked_list_allocator
crate.This PR also adds a pretty simple test case to ensure we are not "leaking" these excess bytes on either end.