diff --git a/legacy/evas/src/evas_misc.c b/legacy/evas/src/evas_misc.c index 34b5a384d4..8e588fd0c4 100644 --- a/legacy/evas/src/evas_misc.c +++ b/legacy/evas/src/evas_misc.c @@ -7,6 +7,8 @@ #include "evas_imlib_routines.h" #include "evas_image_routines.h" +void _evas_layer_free(Evas e, Evas_Layer layer); + Evas evas_new(void) { @@ -33,10 +35,7 @@ evas_free(Evas e) Evas_Layer layer; layer = l->data; - /* FIXME: odd? can someine investigate? i'm stumped on this one */ - /* this is odd - compile evas with -O0 no segv - otherwise a */ - /* segv ....... ???? */ - _evas_layer_free(layer); + _evas_layer_free(e, layer); } if (e->layers) evas_list_free(e->layers); if (e->updates) imlib_updates_free(e->updates); diff --git a/legacy/evas/src/evas_object.c b/legacy/evas/src/evas_object.c index fc638241f5..c4d07ee3d4 100644 --- a/legacy/evas/src/evas_object.c +++ b/legacy/evas/src/evas_object.c @@ -36,7 +36,8 @@ _evas_remove_data(Evas e, Evas_Object o) Evas_Data d; d = l->data; - free(d->key); + if (d->key) + free(d->key); free(d); } evas_list_free(o->data); @@ -96,8 +97,10 @@ _evas_layer_free(Evas e, Evas_Layer layer) _evas_callback_call(e, o, CALLBACK_FREE, 0, 0, 0); _evas_remove_callbacks(e, o); _evas_remove_data(e, o); - o->object_renderer_data_free(e, o); - o->object_free(o); + if (o->object_renderer_data_free) + o->object_renderer_data_free(e, o); + if (o->object_free) + o->object_free(o); } free(layer); }