summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2016-12-06 11:44:05 -0800
committerCedric BAIL <cedric@osg.samsung.com>2016-12-06 16:26:08 -0800
commit3aa63faa1087aafa7fe1f7d4a778536dbd4de53f (patch)
treed10d3a21d3ad4e86b5d03c8959004a7ca1a31590
parent27a47da15bcb97458406ec176e1e92fa92ede99f (diff)
downloadefl-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.c11
-rw-r--r--src/lib/evas/cache/evas_preload.c1
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);
}