jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=bc436ba95f74a75da8142a2de1b0ace23d0c9bf2
commit bc436ba95f74a75da8142a2de1b0ace23d0c9bf2 Author: Jean-Philippe Andre <[email protected]> Date: Thu Jan 22 17:43:23 2015 +0900 Evas masking: Fix another memory leak When the mask is hidden, free its surface. This will fix leaks in, say, a genlist full of masked objects. --- src/lib/evas/canvas/evas_object_main.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index bf8aac2..4e1237f 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -1261,6 +1261,27 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) } EINA_COW_STATE_WRITE_END(obj, state_write, cur); + if (obj->mask->is_mask) + { + if (obj->mask->surface || + obj->mask->x || obj->mask->y || obj->mask->w || obj->mask->h || + obj->mask->is_alpha || obj->mask->redraw) + { + EINA_COW_WRITE_BEGIN(evas_object_mask_cow, obj->mask, + Evas_Object_Mask_Data, mask) + mask->redraw = EINA_FALSE; + mask->is_alpha = EINA_FALSE; + mask->x = mask->y = mask->w = mask->h = 0; + if (mask->surface) + { + obj->layer->evas->engine.func->image_map_surface_free + (obj->layer->evas->engine.data.output, mask->surface); + mask->surface = NULL; + } + EINA_COW_WRITE_END(evas_object_mask_cow, obj->mask, mask); + } + } + evas_object_change(eo_obj, obj); evas_object_clip_dirty(eo_obj, obj); if (obj->layer->evas && !(obj->layer->evas->is_frozen)) --
