From 4f495408e1f0730d630c17ac9f56c531c60ca144 Mon Sep 17 00:00:00 2001 From: barbieri Date: Fri, 26 Dec 2008 12:50:55 +0000 Subject: [PATCH] fix locking around entry_surface_alloc. we must make sure flags are consistent with actual values, so lock around use and set of these variables as well. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@38322 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/cache/evas_cache_image.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/lib/cache/evas_cache_image.c b/src/lib/cache/evas_cache_image.c index 7d3a003..b7af017 100644 --- a/src/lib/cache/evas_cache_image.c +++ b/src/lib/cache/evas_cache_image.c @@ -255,6 +255,27 @@ _evas_cache_image_entry_new(Evas_Cache_Image *cache, } static void +_evas_cache_image_entry_surface_alloc__locked(Evas_Cache_Image *cache, + Image_Entry *ie, + int wmin, + int hmin) +{ + if (ie->allocated.w == wmin && ie->allocated.h == hmin) + return ; + + if (cache->func.surface_alloc(ie, wmin, hmin)) + { + wmin = 0; + hmin = 0; + } + + ie->w = wmin; + ie->h = hmin; + ie->allocated.w = wmin; + ie->allocated.h = hmin; +} + +static void _evas_cache_image_entry_surface_alloc(Evas_Cache_Image *cache, Image_Entry *ie, int w, @@ -265,27 +286,14 @@ _evas_cache_image_entry_surface_alloc(Evas_Cache_Image *cache, wmin = w > 0 ? w : 1; hmin = h > 0 ? h : 1; - if (ie->allocated.w == wmin && ie->allocated.h == hmin) - return ; #ifdef BUILD_ASYNC_PRELOAD pthread_mutex_lock(&mutex_surface_alloc); #endif - - if (cache->func.surface_alloc(ie, wmin, hmin)) - { - wmin = 0; - hmin = 0; - } - + _evas_cache_image_entry_surface_alloc__locked(cache, ie, wmin, hmin); #ifdef BUILD_ASYNC_PRELOAD pthread_mutex_unlock(&mutex_surface_alloc); #endif - - ie->w = wmin; - ie->h = hmin; - ie->allocated.w = wmin; - ie->allocated.h = hmin; } #ifdef BUILD_ASYNC_PRELOAD -- 2.7.4