diff --git a/legacy/evas/src/evas_misc.c b/legacy/evas/src/evas_misc.c index da9f30e772..34b5a384d4 100644 --- a/legacy/evas/src/evas_misc.c +++ b/legacy/evas/src/evas_misc.c @@ -33,6 +33,9 @@ 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); } if (e->layers) evas_list_free(e->layers); diff --git a/legacy/evas/src/evas_object.c b/legacy/evas/src/evas_object.c index ec32633429..fc638241f5 100644 --- a/legacy/evas/src/evas_object.c +++ b/legacy/evas/src/evas_object.c @@ -87,22 +87,17 @@ _evas_real_del_object(Evas e, Evas_Object o) void _evas_layer_free(Evas e, Evas_Layer layer) { - if (layer->objects) + while (layer->objects) { - Evas_List l; + Evas_Object o; - for (l = layer->objects; l; l = l->next) - { - Evas_Object o; - - o = l->data; - _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); - } - evas_list_free(layer->objects); + o = layer->objects->data; + layer->objects = evas_list_remove(layer->objects, o); + _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); } free(layer); } diff --git a/legacy/evas/test/Makefile.am b/legacy/evas/test/Makefile.am index 7de78cb271..6cc2439c63 100644 --- a/legacy/evas/test/Makefile.am +++ b/legacy/evas/test/Makefile.am @@ -11,6 +11,6 @@ evas_test_DEPENDENCIES = $(top_srcdir)/src/libevas.la evas_test_SOURCES = evas_test.c -evas_test_LDFLAGS = -static +evas_test_LDFLAGS = -static evas_test_LDADD = $(top_builddir)/src/libevas.la diff --git a/legacy/evas/test/evas_test.c b/legacy/evas/test/evas_test.c index 697ea20ccf..9ccd3f4f22 100644 --- a/legacy/evas/test/evas_test.c +++ b/legacy/evas/test/evas_test.c @@ -275,6 +275,11 @@ main(int argc, char **argv) down = 0; button = ev.xbutton.button; + if (button == 3) + { + evas_free(e); + exit(0); + } mouse_x = ev.xbutton.x; mouse_y = ev.xbutton.y; evas_event_button_up(e, mouse_x, mouse_y, button);