Safe looping on shutdown.
authorSebastian Dransfeld <sd@tango.flipp.net>
Thu, 5 Apr 2007 11:59:17 +0000 (11:59 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Thu, 5 Apr 2007 11:59:17 +0000 (11:59 +0000)
SVN revision: 29370

src/bin/e_container.c
src/bin/e_manager.c

index 22d70b4..05eaaa3 100644 (file)
@@ -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);
index 3222284..25bb9c4 100644 (file)
@@ -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)
      {