* evas: make it possible to call unload_all from surface_alloc.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 4 Jun 2010 15:21:12 +0000 (15:21 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 4 Jun 2010 15:21:12 +0000 (15:21 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@49448 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/cache/evas_cache_image.c
src/lib/engines/common/evas_image_main.c
src/lib/include/evas_common.h

index 5d03422..3d3bd12 100644 (file)
@@ -1346,7 +1346,10 @@ evas_cache_image_load_data(Image_Entry *im)
    LKL(im->lock);
 #endif
 
+   im->flags.in_progress = EINA_TRUE;
    error = cache->func.load(im);
+   im->flags.in_progress = EINA_FALSE;
+
 #ifdef BUILD_ASYNC_PRELOAD
    LKU(im->lock);
 #endif
@@ -1377,10 +1380,14 @@ evas_cache_image_unload_data(Image_Entry *im)
    assert(im->cache);
    cache = im->cache;
 
+   if (im->flags.in_progress) return ;
+
+   evas_cache_image_preload_cancel(im, NULL);
+
 #ifdef BUILD_ASYNC_PRELOAD
    LKL(im->lock);
 #endif
-   if ((!im->flags.loaded) || (!im->file) || 
+   if ((!im->flags.loaded) || (!im->file) ||
        (!im->info.module) || (im->flags.dirty))
      {
 #ifdef BUILD_ASYNC_PRELOAD
@@ -1390,7 +1397,7 @@ evas_cache_image_unload_data(Image_Entry *im)
      }
    evas_common_rgba_image_scalecache_dirty(im);
    cache->func.destructor(im);
-   
+
 #ifdef BUILD_ASYNC_PRELOAD
    LKU(im->lock);
 #endif
index a86962e..d2efb67 100644 (file)
@@ -191,8 +191,6 @@ evas_common_rgba_image_unload(Image_Entry *ie)
 {
    RGBA_Image   *im = (RGBA_Image *) ie;
 
-   evas_cache_image_preload_cancel(ie, NULL);
-
    if (!ie->flags.loaded) return;
    if ((!ie->info.module) && (!ie->data1)) return;
    if (!ie->file) return;
index 9e76263..d2669ca 100644 (file)
@@ -507,6 +507,7 @@ struct _RGBA_Image_Loadopts
 struct _Image_Entry_Flags
 {
    Eina_Bool loaded       : 1;
+   Eina_Bool in_progress  : 1;
    Eina_Bool dirty        : 1;
    Eina_Bool activ        : 1;
    Eina_Bool need_data    : 1;