The for loop inside _edje_file_del is accessing Edje_Real_Part that could be
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 8 Dec 2008 14:23:26 +0000 (14:23 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 8 Dec 2008 14:23:26 +0000 (14:23 +0000)
destroyed by _edje_cache_coll_unref. So moving the call to _edje_cache_coll_unref
after the last use of Edje_Real_Part should be better.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/edje@38020 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_load.c

index d405281..118d903 100644 (file)
@@ -717,20 +717,6 @@ _edje_file_del(Edje *ed)
    _edje_programs_patterns_clean(ed);
 
    if (!((ed->file) && (ed->collection))) return;
-   if ((ed->file) && (ed->collection))
-     {
-       Eina_List *l;
-       Edje_Part *ep;
-
-       _edje_textblock_styles_del(ed);
-       EINA_LIST_FOREACH(ed->collection->parts, l, ep)
-         {
-            _edje_text_part_on_del(ed, ep);
-            _edje_color_class_on_del(ed, ep);
-         }
-       _edje_cache_coll_unref(ed->file, ed->collection);
-       ed->collection = NULL;
-     }
    if (ed->table_parts)
      {
        int i;
@@ -787,6 +773,20 @@ _edje_file_del(Edje *ed)
             free(rp);
          }
      }
+   if ((ed->file) && (ed->collection))
+     {
+       Eina_List *l;
+       Edje_Part *ep;
+
+       _edje_textblock_styles_del(ed);
+       EINA_LIST_FOREACH(ed->collection->parts, l, ep)
+         {
+            _edje_text_part_on_del(ed, ep);
+            _edje_color_class_on_del(ed, ep);
+         }
+       _edje_cache_coll_unref(ed->file, ed->collection);
+       ed->collection = NULL;
+     }
    if (ed->file)
      {
        _edje_cache_file_unref(ed->file);