From 367e3a31dffcc4be2c6b1d0c19f23c0e7d51a5b2 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 1 Mar 2021 15:44:27 +0100 Subject: [PATCH] fix(mem): with LV_MEM_CUSTOM don't try to realloc &zero_mem, use malloc instead --- src/lv_misc/lv_mem.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lv_misc/lv_mem.c b/src/lv_misc/lv_mem.c index cc832da01..3847219b9 100644 --- a/src/lv_misc/lv_mem.c +++ b/src/lv_misc/lv_mem.c @@ -264,7 +264,15 @@ void * lv_mem_realloc(void * data_p, size_t new_size) MEM_TRACE("reallocating 0x%p with %d size", data_p, new_size); void * new_p = NULL; #if LV_MEM_CUSTOM - new_p = LV_MEM_CUSTOM_REALLOC(data_p, new_size); + if(new_size == 0) { + MEM_TRACE("using zero_mem"); + LV_MEM_CUSTOM_FREE(data_p); + return &zero_mem; + } + + if(data_p == &zero_mem) new_p = LV_MEM_CUSTOM_ALLOC(new_size); + else new_p = LV_MEM_CUSTOM_REALLOC(data_p, new_size); + if(new_p == NULL) { LV_LOG_ERROR("couldn't allocate memory"); return NULL; @@ -372,13 +380,12 @@ void lv_mem_defrag(void) lv_res_t lv_mem_test(void) { -#if LV_MEM_CUSTOM == 0 - if(zero_mem != ZERO_MEM_SENTINEL) { LV_LOG_WARN("zero_mem is written"); return LV_RES_INV; } +#if LV_MEM_CUSTOM == 0 lv_mem_ent_t * e; e = ent_get_next(NULL); while(e) {