mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-19 05:39:17 +02:00
Check return value of gc_heap_free()
This commit is contained in:
parent
5a25611934
commit
38ad580d33
1 changed files with 7 additions and 5 deletions
12
gc.c
12
gc.c
|
@ -266,7 +266,7 @@ gc_heap *gc_heap_free(gc_heap *page, gc_heap *prev_page)
|
|||
{
|
||||
// At least for now, do not free first page
|
||||
if (prev_page == NULL || page == NULL) {
|
||||
return page;
|
||||
return NULL;
|
||||
}
|
||||
#if GC_DEBUG_TRACE
|
||||
fprintf(stderr, "DEBUG freeing heap type %d page at addr: %p\n", page->type, page);
|
||||
|
@ -928,10 +928,12 @@ size_t gc_sweep(gc_heap * h, int heap_type, size_t * sum_freed_ptr, gc_thread_da
|
|||
if (gc_is_heap_empty(h) &&
|
||||
(h->type == HEAP_HUGE || !(h->ttl--))) {
|
||||
unsigned int h_size = h->size;
|
||||
h = gc_heap_free(h, prev_h);
|
||||
ck_pr_sub_64(&(thd->cached_heap_free_sizes[heap_type] ), h_size);
|
||||
ck_pr_sub_64(&(thd->cached_heap_total_sizes[heap_type]), h_size);
|
||||
|
||||
gc_heap *new_h = gc_heap_free(h, prev_h);
|
||||
if (new_h) { // Ensure free succeeded
|
||||
h = new_h;
|
||||
ck_pr_sub_64(&(thd->cached_heap_free_sizes[heap_type] ), h_size);
|
||||
ck_pr_sub_64(&(thd->cached_heap_total_sizes[heap_type]), h_size);
|
||||
}
|
||||
}
|
||||
sum_freed += heap_freed;
|
||||
heap_freed = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue