From a2bd96023f083777d2c34a690465caba2cd7b5ff Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Fri, 1 Jul 2022 13:27:05 +0100 Subject: [PATCH] fix(draw): solve memory leaking issue (#3437) * fix(draw): solve memory leaking issue * Update lv_draw_sw_layer.c * Revert "Update lv_draw_sw_layer.c" This reverts commit 4ca1ab303c1e0297529f7eb662ea4ee7f24b10fa. * Revert "fix(draw): solve memory leaking issue" This reverts commit 6f36e1a8c324abf79423b83bea9611f8cd59664d. * fix(draw): free layer ctx when layer_init returns NULL * Update lv_draw_layer.c --- src/draw/lv_draw_layer.c | 6 +++++- src/draw/sw/lv_draw_sw_layer.c | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/draw/lv_draw_layer.c b/src/draw/lv_draw_layer.c index d49a226cd..da35682d1 100644 --- a/src/draw/lv_draw_layer.c +++ b/src/draw/lv_draw_layer.c @@ -55,7 +55,11 @@ lv_draw_layer_ctx_t * lv_draw_layer_create(lv_draw_ctx_t * draw_ctx, const lv_ar layer_ctx->original.screen_transp = disp_refr->driver->screen_transp; layer_ctx->area_full = *layer_area; - return draw_ctx->layer_init(draw_ctx, layer_ctx, flags); + lv_draw_layer_ctx_t * init_layer_ctx = draw_ctx->layer_init(draw_ctx, layer_ctx, flags); + if(NULL == init_layer_ctx) { + lv_mem_free(layer_ctx); + } + return init_layer_ctx; } void lv_draw_layer_adjust(struct _lv_draw_ctx_t * draw_ctx, struct _lv_draw_layer_ctx_t * layer_ctx, diff --git a/src/draw/sw/lv_draw_sw_layer.c b/src/draw/sw/lv_draw_sw_layer.c index a9461b51f..644012fee 100644 --- a/src/draw/sw/lv_draw_sw_layer.c +++ b/src/draw/sw/lv_draw_sw_layer.c @@ -61,7 +61,6 @@ struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * dr layer_sw_ctx->buf_size_bytes = LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE; layer_sw_ctx->base_draw.buf = lv_mem_alloc(layer_sw_ctx->buf_size_bytes); if(layer_sw_ctx->base_draw.buf == NULL) { - lv_mem_free(layer_ctx); return NULL; } } @@ -78,7 +77,6 @@ struct _lv_draw_layer_ctx_t * lv_draw_sw_layer_create(struct _lv_draw_ctx_t * dr lv_memset_00(layer_sw_ctx->base_draw.buf, layer_sw_ctx->buf_size_bytes); layer_sw_ctx->has_alpha = flags & LV_DRAW_LAYER_FLAG_HAS_ALPHA ? 1 : 0; if(layer_sw_ctx->base_draw.buf == NULL) { - lv_mem_free(layer_ctx); return NULL; }