From 3d1e43e8eb2db8a31bea965014a35db8a3a32e66 Mon Sep 17 00:00:00 2001 From: vanten-s Date: Mon, 12 Aug 2024 16:27:53 +0200 Subject: [PATCH] Fixed a bug in the heap and nicer formatting for print_heap --- kernel/debugging.c | 2 ++ kernel/heap.c | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/kernel/debugging.c b/kernel/debugging.c index b6d02b5..9dec585 100644 --- a/kernel/debugging.c +++ b/kernel/debugging.c @@ -33,6 +33,7 @@ void print_hex_bytes(void* bytes, size_t len) void print_heap() { + terminal_writestring("--START HEAP--\n"); struct Heap_Block* current = global_heap.start; while (current != 0) { @@ -55,4 +56,5 @@ void print_heap() current = current->next; } + terminal_writestring("--END HEAP--\n"); } diff --git a/kernel/heap.c b/kernel/heap.c index 33859c1..f56eb26 100644 --- a/kernel/heap.c +++ b/kernel/heap.c @@ -51,8 +51,22 @@ void* malloc(size_t size) void free(void *ptr) { struct Heap_Block* current = global_heap.start; + + struct Heap_Block* first_unused; + bool found_unused = false; + while (current->data != ptr) { - current = current->next; + if (!current->used && !found_unused) { + first_unused = current; + found_unused = true; + } else { + found_unused = false; + } + current = current->next; + } + + if (!found_unused) { + first_unused = current; } current->used = false; @@ -61,9 +75,10 @@ void free(void *ptr) return; } - struct Heap_Block* start = current; + struct Heap_Block* start = first_unused; + current = start; - while (current->used == false && current != 0) { + while (current->used == false && current->next != 0) { current = current->next; }