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.



SVN revision: 38322
This commit is contained in:
Gustavo Sverzut Barbieri 2008-12-26 12:50:55 +00:00
parent 297858d10c
commit 363ddc283d
1 changed files with 22 additions and 14 deletions

View File

@ -254,6 +254,27 @@ _evas_cache_image_entry_new(Evas_Cache_Image *cache,
return ie;
}
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,
@ -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