From: Enlightenment S. <no-...@en...> - 2011-05-01 06:26:47
|
Log: and try and reduce possible cache deadlocks/issues. Author: raster Date: 2011-04-30 23:26:41 -0700 (Sat, 30 Apr 2011) New Revision: 59064 Trac: http://trac.enlightenment.org/e/changeset/59064 Modified: trunk/evas/src/lib/cache/evas_cache_image.c Modified: trunk/evas/src/lib/cache/evas_cache_image.c =================================================================== --- trunk/evas/src/lib/cache/evas_cache_image.c 2011-05-01 06:24:02 UTC (rev 59063) +++ trunk/evas/src/lib/cache/evas_cache_image.c 2011-05-01 06:26:41 UTC (rev 59064) @@ -207,10 +207,12 @@ if (cache->func.debug) cache->func.debug("deleting", ie); #ifdef BUILD_ASYNC_PRELOAD if (ie->flags.delete_me == 1) return; + LKL(ie->lock); if (ie->preload) { ie->flags.delete_me = 1; _evas_cache_image_entry_preload_remove(ie, NULL); + LKU(ie->lock); return; } #endif @@ -228,7 +230,10 @@ cache->func.surface_delete(ie); #ifdef BUILD_ASYNC_PRELOAD + LKU(ie->lock); +#ifndef SCALECACHE LKD(ie->lock); +#endif LKD(ie->lock_cancel); #endif #ifdef EVAS_FRAME_QUEUING @@ -303,7 +308,9 @@ LKI(ie->lock_references); #endif #ifdef BUILD_ASYNC_PRELOAD +#ifndef SCALECACHE LKI(ie->lock); +#endif LKI(ie->lock_cancel); #endif @@ -590,12 +597,15 @@ #endif return; } + // XXX: i smell concurrency problem here #ifdef BUILD_ASYNC_PRELOAD EINA_LIST_FREE(cache->preload, im) { + LKL(im->lock); /* By doing that we are protecting us from destroying image when the cache is no longuer available. */ im->flags.delete_me = 1; _evas_cache_image_entry_preload_remove(im, NULL); + LKU(im->lock); } evas_async_events_process(); #endif |