cedric pushed a commit to branch master.

commit d1bed386bd0457118b58ddddf2f5f37eb065b461
Author: Cedric Bail <[email protected]>
Date:   Tue Jun 4 11:17:21 2013 +0900

    evas: correctly detect if loader support asynchronous preloading.
    
    This is an astonishing bug, I wonder since how long it has been there. It
    is basically due to the use of void * and a wrong cast. Type checking is
    clearly useful, let's use it more !
---
 ChangeLog                             |  4 ++++
 NEWS                                  |  2 +-
 src/lib/evas/cache/evas_cache_image.c |  4 ++--
 src/lib/evas/common/evas_image_load.c | 10 +++++-----
 src/lib/evas/file/evas_module.c       |  5 ++---
 src/lib/evas/include/evas_common.h    |  6 ++++--
 6 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d81ed9f..c0f8736 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-06-04  Cedric Bail
+
+       * Evas: correctly detect if loader support asynchronous preloading.
+
 2013-06-03  Ederson Desouza
 
         * Add -1.0 value to text ellipsis -- for not ellipsizing it at all.
diff --git a/NEWS b/NEWS
index f070017..9fdf587 100644
--- a/NEWS
+++ b/NEWS
@@ -317,4 +317,4 @@ Fixes:
     * Fix evas gl engine to work in 16bpp nicely.
     * Fix native surface to be more anal about depth matching.
     * Fix eeze sensors to not segv on shutdown
-        
+    * Evas: correctly detect if a loader support asynchronous preloading.
diff --git a/src/lib/evas/cache/evas_cache_image.c 
b/src/lib/evas/cache/evas_cache_image.c
index 377e0fa..8f2b6b0 100644
--- a/src/lib/evas/cache/evas_cache_image.c
+++ b/src/lib/evas/cache/evas_cache_image.c
@@ -343,8 +343,8 @@ _evas_cache_image_async_heavy(void *data)
    current->channel++;
    cache = current->cache;
 
-   if ((!current->flags.loaded) && 
-       ((Evas_Image_Load_Func*) current->info.module)->threadable)
+   if ((!current->flags.loaded) &&
+       current->info.loader->threadable)
      {
         error = cache->func.load(current);
         if (cache->func.debug) cache->func.debug("load", current);
diff --git a/src/lib/evas/common/evas_image_load.c 
b/src/lib/evas/common/evas_image_load.c
index 006a724..7d0d671 100644
--- a/src/lib/evas/common/evas_image_load.c
+++ b/src/lib/evas/common/evas_image_load.c
@@ -345,9 +345,9 @@ evas_common_load_rgba_image_module_from_file(Image_Entry 
*ie)
        em->definition->name : "<UNKNOWN>",
        file);
 
-   ie->info.module = (void*) em;
+   ie->info.module = em;
    ie->info.loader = (void*) em ? em->functions : NULL;
-   evas_module_ref((Evas_Module*) ie->info.module);
+   evas_module_ref(ie->info.module);
    return ret;
 }
 
@@ -388,7 +388,7 @@ evas_common_load_rgba_image_data_from_file(Image_Entry *ie)
 //   printf("load data [%p] %s %s\n", ie, ie->file, ie->key);
            
    evas_image_load_func = ie->info.loader;
-   evas_module_use((Evas_Module*) ie->info.module);
+   evas_module_use(ie->info.module);
 
    if (!ie->f) return EVAS_LOAD_ERROR_DOES_NOT_EXIST;
 
@@ -412,7 +412,7 @@ evas_common_load_rgba_image_data_from_file(Image_Entry *ie)
 
    if (property.premul)
      evas_common_image_premul(ie);
-//   evas_module_unref((Evas_Module*) ie->info.module);
+//   evas_module_unref(ie->info.module);
 //   ie->info.module = NULL;
 
    return ret;
@@ -426,7 +426,7 @@ 
evas_common_load_rgba_image_frame_duration_from_file(Image_Entry *ie, const int
    if (!ie->info.module) return -1;
 
    evas_image_load_func = ie->info.loader;
-   evas_module_use((Evas_Module*) ie->info.module);
+   evas_module_use(ie->info.module);
    if (evas_image_load_func->frame_duration)
      {
         if (!ie->f) return -1;
diff --git a/src/lib/evas/file/evas_module.c b/src/lib/evas/file/evas_module.c
index 03ab41c..539ef5e 100644
--- a/src/lib/evas/file/evas_module.c
+++ b/src/lib/evas/file/evas_module.c
@@ -4,9 +4,8 @@
 
 #include <string.h>
 
-#include <evas_common.h>
-#include <evas_private.h>
-#include <evas_module.h>
+#include "evas_common.h"
+#include "evas_private.h"
 
 
 static Eina_Hash *evas_modules[4] = {
diff --git a/src/lib/evas/include/evas_common.h 
b/src/lib/evas/include/evas_common.h
index 611529b..5cd6594 100644
--- a/src/lib/evas/include/evas_common.h
+++ b/src/lib/evas/include/evas_common.h
@@ -347,6 +347,8 @@ extern EAPI int _evas_log_dom_global;
 
 /*****************************************************************************/
 
+#include "../file/evas_module.h"
+
 typedef unsigned long long             DATA64;
 typedef unsigned int                   DATA32;
 typedef unsigned short                 DATA16;
@@ -593,8 +595,8 @@ struct _Image_Entry
 
    struct
      {
-        void           *module;
-        void           *loader;
+        Evas_Module          *module;
+        Evas_Image_Load_Func *loader;
      } info;
 
    LK(lock);

-- 

------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j

Reply via email to