From c875a2c35c4f3ef754e7b6c04fb61092940c518f Mon Sep 17 00:00:00 2001 From: Liam Kerr Date: Thu, 12 Feb 2026 02:31:20 +0000 Subject: [PATCH] (memory): initialise HeapHeader when allocating page + other fixes --- src/kernel/memory.c | 31 +++++++++++++++++++------------ src/kernel/memory.h | 2 +- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/kernel/memory.c b/src/kernel/memory.c index a54555c..6b965c3 100644 --- a/src/kernel/memory.c +++ b/src/kernel/memory.c @@ -53,8 +53,7 @@ size_t align_down(size_t value, size_t size) return value & ~(size - 1); } -void page_free(void *addr) -{ +void page_free(void *addr){ if (addr == NULL) return; if (!is_aligned_to((size_t)addr, PAGE_SIZE)) @@ -65,7 +64,7 @@ void page_free(void *addr) free_list = p; } -void *page_alloc() +HeapHeader *page_alloc() { if (free_list == NULL) { @@ -77,7 +76,14 @@ void *page_alloc() // zero out the page memset(p, 0, PAGE_SIZE); - return (void *)p; + HeapHeader *header = (HeapHeader *)p; + + header->size = PAGE_SIZE - sizeof(HeapHeader); + header->is_free = 1; + header->next = NULL; + header->prev = NULL; + + return header; } void *kmalloc(size_t size) @@ -90,12 +96,7 @@ void *kmalloc(size_t size) if (heap_free_list == NULL) { HeapHeader *header = (HeapHeader *)page_alloc(); - header->size = PAGE_SIZE - sizeof(HeapHeader); - header->is_free = 1; - header->next = NULL; - header->prev = NULL; - - heap_free_list = header; + kheap_insert_sorted(header); } HeapHeader *current = heap_free_list; @@ -112,8 +113,6 @@ void *kmalloc(size_t size) if (current == NULL) { HeapHeader *header = (HeapHeader *)page_alloc(); - header->size = PAGE_SIZE - sizeof(HeapHeader); - header->is_free = 1; kheap_insert_sorted(header); current = header; } @@ -171,6 +170,14 @@ void kfree(void *ptr) { page_free((void *)addr); } + + } + else + { + if (final_block->prev == NULL && final_block->next == NULL && final_block != heap_free_list) + { + kheap_insert_sorted(final_block); + } } } diff --git a/src/kernel/memory.h b/src/kernel/memory.h index d0ecb83..56066a0 100644 --- a/src/kernel/memory.h +++ b/src/kernel/memory.h @@ -23,7 +23,7 @@ size_t align_up(size_t value, size_t size); size_t align_down(size_t value, size_t size); void page_init(); void page_free(void *addr); -void *page_alloc(); +HeapHeader *page_alloc(); void *kmalloc(size_t size); void kheap_split(HeapHeader *header, size_t size); void kheap_insert_sorted(HeapHeader *new_block);