fix locking around entry_surface_alloc.
authorbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 26 Dec 2008 12:50:55 +0000 (12:50 +0000)
committerbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 26 Dec 2008 12:50:55 +0000 (12:50 +0000)
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

index 7d3a003..b7af017 100644 (file)
@@ -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