Fixed bug where deleting a page meant not being able to allocate another
This was due to the beg or end page being not set correctly (dangling pointer).
This commit is contained in:
@@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#include "./heap.h"
|
#include "./heap.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
page_t *page_create(size_t max, page_t *next)
|
page_t *page_create(size_t max, page_t *next)
|
||||||
{
|
{
|
||||||
page_t *page = calloc(1, sizeof(*page) + max);
|
page_t *page = calloc(1, sizeof(*page) + max);
|
||||||
@@ -41,6 +43,8 @@ bool heap_free_page(heap_t *heap, page_t *page)
|
|||||||
heap->beg = heap->beg->next;
|
heap->beg = heap->beg->next;
|
||||||
page_delete(page);
|
page_delete(page);
|
||||||
--heap->pages;
|
--heap->pages;
|
||||||
|
if (heap->pages == 0)
|
||||||
|
heap->end = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,6 +67,8 @@ bool 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;
|
||||||
|
if (heap->pages == 0)
|
||||||
|
heap->beg = NULL;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user