aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/src/memory/heap/linked_list_allocator.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86_64/src/memory/heap/linked_list_allocator.cpp b/arch/x86_64/src/memory/heap/linked_list_allocator.cpp
index f4ba5e2..a2a8c79 100644
--- a/arch/x86_64/src/memory/heap/linked_list_allocator.cpp
+++ b/arch/x86_64/src/memory/heap/linked_list_allocator.cpp
@@ -22,8 +22,8 @@ namespace teachos::arch::memory::heap
auto linked_list_allocator::allocate(std::size_t size) -> void *
{
- memory_hole * previous = nullptr;
- auto current = first;
+ auto & previous = first;
+ auto & current = first;
while (current != nullptr)
{
if (current->size > size)
@@ -32,10 +32,14 @@ namespace teachos::arch::memory::heap
}
else if (current->size == size)
{
- if (previous != nullptr)
+ if (previous != current)
{
previous->next = current->next;
}
+ else
+ {
+ current = current->next;
+ }
delete current;
return static_cast<void *>(current);
}