From 782d86c38aa6417f7f93ac9bd3328508e4a9908e Mon Sep 17 00:00:00 2001 From: Charlie Malmqvist Date: Tue, 30 Jul 2024 18:24:20 +0200 Subject: [PATCH] Fix Memory woopsie --- oogabooga/memory.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/oogabooga/memory.c b/oogabooga/memory.c index d712b0d..89eb5eb 100644 --- a/oogabooga/memory.c +++ b/oogabooga/memory.c @@ -473,18 +473,18 @@ void heap_dealloc(void *p) { u8* node_tail = (u8*)node + node->size; if (cast(u8*)new_node == node_tail) { - void *left_node_tail = (u8*)node+node->size; - // We need to account for the cases where we coalesce free blocks with start/end in the middle // of a page. - // new_node->size will be locked but we need node->size += new_node->size; u64 new_node_size = new_node->size; // #Copypaste void *free_tail = (u8*)new_node + new_node->size; - void *next_page = (void*)align_previous(left_node_tail, os.page_size); + void *next_page = (void*)align_previous(node_tail, os.page_size); void *last_page_end = (void*)align_previous(free_tail, os.page_size); + + if ((u8*)next_page < (u8*)node) next_page = (u8*)next_page + os.page_size; + if ((u8*)last_page_end > (u8*)next_page) { os_lock_program_memory_pages(next_page, (u64)last_page_end-(u64)next_page); }