From d800072edf4d057a4d9dd94c5b345b8813a66fbf Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Thu, 5 Apr 2007 11:59:17 +0000 Subject: [PATCH] Safe looping on shutdown. SVN revision: 29370 --- src/bin/e_container.c | 11 ++++++----- src/bin/e_manager.c | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/bin/e_container.c b/src/bin/e_container.c index 22d70b48d..05eaaa302 100644 --- a/src/bin/e_container.c +++ b/src/bin/e_container.c @@ -918,7 +918,7 @@ e_container_all_thaw(void) static void _e_container_free(E_Container *con) { - Evas_List *l, *tmp; + Evas_List *l; ecore_x_window_del(con->event_win); /* We can't use e_object_del here, because border adds a ref to itself @@ -939,11 +939,12 @@ _e_container_free(E_Container *con) } } */ - for (l = con->zones; l;) + l = con->zones; + con->zones = NULL; + while (l) { - tmp = l; - l = l->next; - e_object_del(E_OBJECT(tmp->data)); + e_object_del(E_OBJECT(l->data)); + l = evas_list_remove_list(l, l); } con->manager->containers = evas_list_remove(con->manager->containers, con); e_canvas_del(con->bg_ecore_evas); diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index 322228437..25bb9c4d6 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -55,12 +55,14 @@ e_manager_init(void) EAPI int e_manager_shutdown(void) { - Evas_List *l, *tmp; - for (l = managers; l;) + Evas_List *l; + + l = managers; + managers = NULL; + while (l) { - tmp = l; - l = l->next; - e_object_del(E_OBJECT(tmp->data)); + e_object_del(E_OBJECT(l->data)); + l = evas_list_remove_list(l, l); } if (frame_extents) { @@ -491,7 +493,7 @@ e_managers_keys_ungrab(void) static void _e_manager_free(E_Manager *man) { - Evas_List *l, *tmp; + Evas_List *l; while (man->handlers) { @@ -501,11 +503,12 @@ _e_manager_free(E_Manager *man) man->handlers = evas_list_remove_list(man->handlers, man->handlers); ecore_event_handler_del(h); } - for (l = man->containers; l;) + l = man->containers; + man->containers = NULL; + while (l) { - tmp = l; - l = l->next; - e_object_del(E_OBJECT(tmp->data)); + e_object_del(E_OBJECT(l->data)); + l = evas_list_remove_list(l, l); } if (man->root != man->win) {