diff options
author | Cedric BAIL <cedric@osg.samsung.com> | 2016-12-06 11:44:05 -0800 |
---|---|---|
committer | Cedric BAIL <cedric@osg.samsung.com> | 2016-12-06 16:26:08 -0800 |
commit | 3aa63faa1087aafa7fe1f7d4a778536dbd4de53f (patch) | |
tree | d10d3a21d3ad4e86b5d03c8959004a7ca1a31590 | |
parent | 27a47da15bcb97458406ec176e1e92fa92ede99f (diff) | |
download | efl-3aa63faa1087aafa7fe1f7d4a778536dbd4de53f.tar.gz |
evas: add possibility for image loader to know if what they are working is still useful.
-rw-r--r-- | src/lib/evas/cache/evas_cache_image.c | 11 | ||||
-rw-r--r-- | src/lib/evas/cache/evas_preload.c | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/evas/cache/evas_cache_image.c b/src/lib/evas/cache/evas_cache_image.c index 7dba180db8..152cea655e 100644 --- a/src/lib/evas/cache/evas_cache_image.c +++ b/src/lib/evas/cache/evas_cache_image.c @@ -324,6 +324,14 @@ _evas_cache_image_entry_surface_alloc(Evas_Cache_Image *cache, SLKU(engine_lock); } +static Eina_Bool +evas_cache_image_cancelled(void *data) +{ + Image_Entry *current = data; + + return evas_preload_thread_cancelled_is(current->preload); +} + static void _evas_cache_image_async_heavy(void *data) { @@ -343,7 +351,10 @@ _evas_cache_image_async_heavy(void *data) if ((!current->flags.loaded) && current->info.loader->threadable) { + evas_module_task_register(evas_cache_image_cancelled, current); error = cache->func.load(current); + evas_module_task_unregister(); + if (cache->func.debug) cache->func.debug("load", current); current->load_error = error; if (error != EVAS_LOAD_ERROR_NONE) diff --git a/src/lib/evas/cache/evas_preload.c b/src/lib/evas/cache/evas_preload.c index f18d5b6a1a..9ad2f35d3d 100644 --- a/src/lib/evas/cache/evas_preload.c +++ b/src/lib/evas/cache/evas_preload.c @@ -135,5 +135,6 @@ evas_preload_thread_cancel(Evas_Preload_Pthread *work) Eina_Bool evas_preload_thread_cancelled_is(Evas_Preload_Pthread *work) { + if (!work) return EINA_FALSE; return ecore_thread_check(work->thread); } |