kimcinoo pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=ba09a8101bedf320873d830e97fded0c64370e43
commit ba09a8101bedf320873d830e97fded0c64370e43 Author: Shinwoo Kim <cinoo....@samsung.com> Date: Mon Oct 14 11:09:31 2019 +0900 evas_image: fix memory leak Summary: On the sw engine, an im could be changed and removed by evas_cache_image_size_set. In this case, there is no chance to free its resource and ends up in memory leak. Reviewers: Hermet, raster, jsuya, cedric Reviewed By: cedric Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10334 --- .../evas/engines/software_generic/evas_engine.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index e0577863b6..0dc6c64b52 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -1252,9 +1252,25 @@ eng_image_size_get(void *data EINA_UNUSED, void *image, int *w, int *h) static void * eng_image_size_set(void *data EINA_UNUSED, void *image, int w, int h) { - Image_Entry *im = image; + RGBA_Image *rm; + Image_Entry *im = image, *im2; if (!im) return NULL; - return evas_cache_image_size_set(im, w, h); + + /* sw engine im could be changed and removed in evas_cache_image_size_set. + in this case, there is no chance to free its resource. */ + evas_cache_image_ref(im); + im2 = evas_cache_image_size_set(im, w, h); + if (im != im2 && im->references == 1) + { + rm = (RGBA_Image *)im; + if (rm->native.data) + { + if (rm->native.func.free) + rm->native.func.free(im); + } + } + evas_cache_image_drop(im); + return im2; } static void * --