From: Hermet Park Date: Wed, 26 May 2021 12:39:03 +0000 (+0900) Subject: canvas vg: fix the memory leak issue. X-Git-Tag: accepted/tizen/unified/20210602.122542~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F45%2F258845%2F7;p=platform%2Fupstream%2Fefl.git canvas vg: fix the memory leak issue. some dangled tvg nodes occured memory leak when interpolating vg tree. this fixes the issue. Change-Id: Ifef6f3cad011ef0fd4197bc6c06d00ebc75adbb8 --- diff --git a/src/lib/evas/canvas/efl_canvas_vg_container.c b/src/lib/evas/canvas/efl_canvas_vg_container.c index 341a953..e097438 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_container.c +++ b/src/lib/evas/canvas/efl_canvas_vg_container.c @@ -37,7 +37,7 @@ _efl_canvas_vg_container_render_pre_tvg(Evas_Object_Protected_Data *obj, if (!nd || !nd->data) return; cd = nd->data; - tvg_scene_clear(cd->scene); + tvg_scene_clear(cd->scene, EINA_FALSE); if (!nd->visibility) return; @@ -158,9 +158,10 @@ static void _efl_canvas_vg_container_efl_object_destructor(Eo *obj, Efl_Canvas_Vg_Container_Data *pd) { - - if (!pd->comp.src && pd->scene) - tvg_paint_del(pd->scene); + if (!pd->comp.src && pd->scene) { + tvg_scene_clear(pd->scene, EINA_FALSE); + tvg_paint_del(pd->scene); + } efl_unref(pd->comp_target); eina_list_free(pd->comp.src); diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c b/src/lib/evas/canvas/efl_canvas_vg_object.c index a5fa894..f75d6e2 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_object.c +++ b/src/lib/evas/canvas/efl_canvas_vg_object.c @@ -340,7 +340,6 @@ _cleanup_reference(void *data, const Efl_Event *event EINA_UNUSED) EOLIAN static void _efl_canvas_vg_object_efl_object_invalidate(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd) { - Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas *e = evas_object_evas_get(eo_obj); efl_event_callback_del(e, EFL_CANVAS_SCENE_EVENT_RENDER_POST, _cleanup_reference, pd); @@ -421,8 +420,6 @@ static void _render_to_tvg_buffer(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd, Efl_VG *root, int w EINA_UNUSED, int h EINA_UNUSED) { - tvg_canvas_clear(pd->tvg_canvas, false); - if (!efl_isa(root, EFL_CANVAS_VG_GRADIENT_CLASS)) { Efl_Canvas_Vg_Node_Data *nd = efl_data_scope_get(root, EFL_CANVAS_VG_NODE_CLASS); @@ -529,6 +526,7 @@ _efl_canvas_vg_object_render(Evas_Object *eo_obj EINA_UNUSED, pd->tvg_buffer, obj->cur->geometry.x + x, obj->cur->geometry.y + y, size.w, size.h, do_async); + tvg_canvas_clear(pd->tvg_canvas, EINA_FALSE); pd->changed = EINA_FALSE; }