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; }