From 1c0ca5dfbb10fa0bb822f2d40b58664a30873181 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Sat, 20 Jun 2009 07:17:40 +0000 Subject: [PATCH] fix memory leak introduced with recent layer destruction. also rename evas_layer_free() to evas_layer_free_objects() as what it do now, make _evas_layer_free() as static and use it both cases. SVN revision: 41123 --- legacy/evas/src/lib/canvas/evas_layer.c | 14 +++++++++++--- legacy/evas/src/lib/canvas/evas_main.c | 2 +- legacy/evas/src/lib/include/evas_private.h | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_layer.c b/legacy/evas/src/lib/canvas/evas_layer.c index 241de4536a..9f0041da2e 100644 --- a/legacy/evas/src/lib/canvas/evas_layer.c +++ b/legacy/evas/src/lib/canvas/evas_layer.c @@ -1,6 +1,8 @@ #include "evas_common.h" #include "evas_private.h" +static void _evas_layer_free(Evas_Layer *lay); + void evas_object_inject(Evas_Object *obj, Evas *e) { @@ -31,7 +33,7 @@ evas_object_release(Evas_Object *obj, int clean_layer) if (obj->layer->usage <= 0) { evas_layer_del(obj->layer); - evas_layer_free(obj->layer); + _evas_layer_free(obj->layer); } } obj->layer = NULL; @@ -49,6 +51,12 @@ evas_layer_new(Evas *e) return lay; } +static void +_evas_layer_free(Evas_Layer *lay) +{ + free(lay); +} + void evas_layer_pre_free(Evas_Layer *lay) { @@ -62,7 +70,7 @@ evas_layer_pre_free(Evas_Layer *lay) } void -evas_layer_free(Evas_Layer *lay) +evas_layer_free_objects(Evas_Layer *lay) { while (lay->objects) { @@ -82,7 +90,7 @@ evas_layer_clean(Evas *e) { tmp = e->layers; evas_layer_del(tmp); - free(tmp); + _evas_layer_free(tmp); } } diff --git a/legacy/evas/src/lib/canvas/evas_main.c b/legacy/evas/src/lib/canvas/evas_main.c index 51e1e9e69c..ccf5dd1fc1 100644 --- a/legacy/evas/src/lib/canvas/evas_main.c +++ b/legacy/evas/src/lib/canvas/evas_main.c @@ -158,7 +158,7 @@ evas_free(Evas *e) } } EINA_INLIST_FOREACH(e->layers, lay) - evas_layer_free(lay); + evas_layer_free_objects(lay); evas_layer_clean(e); e->walking_list--; diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 1fd41bfbbc..c82b417092 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -717,7 +717,7 @@ void evas_object_clip_dirty(Evas_Object *obj); void evas_object_recalc_clippees(Evas_Object *obj); Evas_Layer *evas_layer_new(Evas *e); void evas_layer_pre_free(Evas_Layer *lay); -void evas_layer_free(Evas_Layer *lay); +void evas_layer_free_objects(Evas_Layer *lay); void evas_layer_clean(Evas *e); Evas_Layer *evas_layer_find(Evas *e, short layer_num); void evas_layer_add(Evas_Layer *lay);