Safe looping on shutdown.

SVN revision: 29370
This commit is contained in:
Sebastian Dransfeld 2007-04-05 11:59:17 +00:00
parent cca951359d
commit d800072edf
2 changed files with 19 additions and 15 deletions

View File

@ -918,7 +918,7 @@ e_container_all_thaw(void)
static void static void
_e_container_free(E_Container *con) _e_container_free(E_Container *con)
{ {
Evas_List *l, *tmp; Evas_List *l;
ecore_x_window_del(con->event_win); ecore_x_window_del(con->event_win);
/* We can't use e_object_del here, because border adds a ref to itself /* 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; e_object_del(E_OBJECT(l->data));
l = l->next; l = evas_list_remove_list(l, l);
e_object_del(E_OBJECT(tmp->data));
} }
con->manager->containers = evas_list_remove(con->manager->containers, con); con->manager->containers = evas_list_remove(con->manager->containers, con);
e_canvas_del(con->bg_ecore_evas); e_canvas_del(con->bg_ecore_evas);

View File

@ -55,12 +55,14 @@ e_manager_init(void)
EAPI int EAPI int
e_manager_shutdown(void) e_manager_shutdown(void)
{ {
Evas_List *l, *tmp; Evas_List *l;
for (l = managers; l;)
l = managers;
managers = NULL;
while (l)
{ {
tmp = l; e_object_del(E_OBJECT(l->data));
l = l->next; l = evas_list_remove_list(l, l);
e_object_del(E_OBJECT(tmp->data));
} }
if (frame_extents) if (frame_extents)
{ {
@ -491,7 +493,7 @@ e_managers_keys_ungrab(void)
static void static void
_e_manager_free(E_Manager *man) _e_manager_free(E_Manager *man)
{ {
Evas_List *l, *tmp; Evas_List *l;
while (man->handlers) while (man->handlers)
{ {
@ -501,11 +503,12 @@ _e_manager_free(E_Manager *man)
man->handlers = evas_list_remove_list(man->handlers, man->handlers); man->handlers = evas_list_remove_list(man->handlers, man->handlers);
ecore_event_handler_del(h); ecore_event_handler_del(h);
} }
for (l = man->containers; l;) l = man->containers;
man->containers = NULL;
while (l)
{ {
tmp = l; e_object_del(E_OBJECT(l->data));
l = l->next; l = evas_list_remove_list(l, l);
e_object_del(E_OBJECT(tmp->data));
} }
if (man->root != man->win) if (man->root != man->win)
{ {