evas - gl engine - async texture upload - protect null tex handle access
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Mon, 25 Nov 2013 13:29:12 +0000 (22:29 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Mon, 25 Nov 2013 13:29:12 +0000 (22:29 +0900)
this stops a very blantant segv when accessing async->tex when it is
NULL on _evas_gl_preload_main_loop_wakeup().

src/modules/evas/engines/gl_common/evas_gl_preload.c

index 5ee36b6..fee5823 100644 (file)
@@ -102,18 +102,26 @@ _evas_gl_preload_main_loop_wakeup(void)
      {
         Eo *target;
 
-        EINA_LIST_FREE(async->tex->targets, target)
-          eo_do(target, evas_obj_image_pixels_dirty_set(EINA_TRUE));
+        if (async->tex)
+          {
+             EINA_LIST_FREE(async->tex->targets, target)
+               eo_do(target, evas_obj_image_pixels_dirty_set(EINA_TRUE));
+          }
         async->im->cache_entry.flags.preload_done = 0;
-        async->tex->was_preloaded = EINA_TRUE;
+        if (async->tex)
+          {
+             async->tex->was_preloaded = EINA_TRUE;
 
-        async->tex->ptt->allocations = eina_list_remove(async->tex->ptt->allocations, async->tex->aptt);
-        pt_unref(async->tex->ptt);
-        async->tex->ptt = NULL;
-        free(async->tex->aptt);
-        async->tex->aptt = NULL;
+             async->tex->ptt->allocations = 
+               eina_list_remove(async->tex->ptt->allocations,
+                                async->tex->aptt);
+             pt_unref(async->tex->ptt);
+             async->tex->ptt = NULL;
+             free(async->tex->aptt);
+             async->tex->aptt = NULL;
 
-        evas_gl_common_texture_free(async->tex, EINA_FALSE);
+             evas_gl_common_texture_free(async->tex, EINA_FALSE);
+          }
 #ifdef EVAS_CSERVE2
         if (evas_cache2_image_cached(&async->im->cache_entry))
           evas_cache2_image_close(&async->im->cache_entry);