heap_free_page returns true if page was successfully deleted

This commit is contained in:
2023-11-01 21:13:00 +00:00
parent 206dce7bab
commit a5afaee3d0
2 changed files with 8 additions and 5 deletions

View File

@@ -31,17 +31,17 @@ void heap_create(heap_t *heap)
heap->pages = 0; heap->pages = 0;
} }
void heap_free_page(heap_t *heap, page_t *page) bool heap_free_page(heap_t *heap, page_t *page)
{ {
if (!page || !heap) if (!page || !heap)
return; return false;
if (page == heap->beg) if (page == heap->beg)
{ {
heap->beg = heap->beg->next; heap->beg = heap->beg->next;
page_delete(page); page_delete(page);
--heap->pages; --heap->pages;
return; return true;
} }
page_t *prev = NULL, *next = NULL, *cur = NULL; page_t *prev = NULL, *next = NULL, *cur = NULL;
@@ -55,7 +55,7 @@ void heap_free_page(heap_t *heap, page_t *page)
if (!cur) if (!cur)
// Couldn't find the page // Couldn't find the page
return; return false;
// Page was found // Page was found
prev->next = next; prev->next = next;
if (!next) if (!next)
@@ -63,6 +63,8 @@ void heap_free_page(heap_t *heap, page_t *page)
heap->end = prev; heap->end = prev;
page_delete(page); page_delete(page);
--heap->pages; --heap->pages;
return true;
} }
page_t *heap_allocate(heap_t *heap, size_t requested) page_t *heap_allocate(heap_t *heap, size_t requested)

View File

@@ -15,6 +15,7 @@
#include "./base.h" #include "./base.h"
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
typedef struct Page typedef struct Page
@@ -34,7 +35,7 @@ typedef struct
} heap_t; } heap_t;
void heap_create(heap_t *); void heap_create(heap_t *);
void heap_free_page(heap_t *, page_t *); bool heap_free_page(heap_t *, page_t *);
page_t *heap_allocate(heap_t *, size_t); page_t *heap_allocate(heap_t *, size_t);
void heap_stop(heap_t *); void heap_stop(heap_t *);