Skip to content
Snippets Groups Projects
Commit 12d4fa9b authored by Damien George's avatar Damien George
Browse files

py/gc: Refactor assertions in gc_free function.

gc_free() expects either NULL or a valid pointer into the heap, so the
checks for a valid pointer can be turned into assertions.
parent 1e6fd9f2
No related branches found
No related tags found
No related merge requests found
...@@ -536,37 +536,34 @@ void gc_free(void *ptr) { ...@@ -536,37 +536,34 @@ void gc_free(void *ptr) {
DEBUG_printf("gc_free(%p)\n", ptr); DEBUG_printf("gc_free(%p)\n", ptr);
if (VERIFY_PTR(ptr)) { if (ptr == NULL) {
GC_EXIT();
} else {
// get the GC block number corresponding to this pointer
assert(VERIFY_PTR(ptr));
size_t block = BLOCK_FROM_PTR(ptr); size_t block = BLOCK_FROM_PTR(ptr);
if (ATB_GET_KIND(block) == AT_HEAD) { assert(ATB_GET_KIND(block) == AT_HEAD);
#if MICROPY_ENABLE_FINALISER
FTB_CLEAR(block);
#endif
// set the last_free pointer to this block if it's earlier in the heap
if (block / BLOCKS_PER_ATB < MP_STATE_MEM(gc_last_free_atb_index)) {
MP_STATE_MEM(gc_last_free_atb_index) = block / BLOCKS_PER_ATB;
}
// free head and all of its tail blocks #if MICROPY_ENABLE_FINALISER
do { FTB_CLEAR(block);
ATB_ANY_TO_FREE(block); #endif
block += 1;
} while (ATB_GET_KIND(block) == AT_TAIL);
GC_EXIT();
#if EXTENSIVE_HEAP_PROFILING // set the last_free pointer to this block if it's earlier in the heap
gc_dump_alloc_table(); if (block / BLOCKS_PER_ATB < MP_STATE_MEM(gc_last_free_atb_index)) {
#endif MP_STATE_MEM(gc_last_free_atb_index) = block / BLOCKS_PER_ATB;
} else {
GC_EXIT();
assert(!"bad free");
} }
} else if (ptr != NULL) {
GC_EXIT(); // free head and all of its tail blocks
assert(!"bad free"); do {
} else { ATB_ANY_TO_FREE(block);
block += 1;
} while (ATB_GET_KIND(block) == AT_TAIL);
GC_EXIT(); GC_EXIT();
#if EXTENSIVE_HEAP_PROFILING
gc_dump_alloc_table();
#endif
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment