Author: post
Date: 2011-12-29 19:02:45 +0100 (Thu, 29 Dec 2011)
New Revision: 4068

Modified:
   trunk/plugins/cache/cache.c
Log:
Make cache thread safe.

Modified: trunk/plugins/cache/cache.c
===================================================================
--- trunk/plugins/cache/cache.c 2011-12-29 01:00:56 UTC (rev 4067)
+++ trunk/plugins/cache/cache.c 2011-12-29 18:02:45 UTC (rev 4068)
@@ -43,6 +43,7 @@
        RSFilterChangedMask mask;
        gboolean ignore_roi;
        gint latency;
+       GMutex *cache_mutex;
 };
 
 struct _RSCacheClass {
@@ -107,6 +108,7 @@
        cache->ignore_roi = FALSE;
        cache->latency = 0;
        cache->cached_image = rs_filter_response_new();
+       cache->cache_mutex = g_mutex_new();
 }
 
 static void
@@ -114,6 +116,7 @@
 {
        RSCache *cache = RS_CACHE(object);
        flush(cache);
+       g_mutex_free(cache->cache_mutex);
 }
 
 static void
@@ -229,6 +232,7 @@
 
        filter_debug("Cache[%p]: getimage() called", filter);
 
+       g_mutex_lock(cache->cache_mutex);
        if (roi && cache->ignore_roi)
        {
                roi = NULL;
@@ -311,6 +315,7 @@
                g_object_unref(img);
 
        g_object_unref(request);
+       g_mutex_unlock(cache->cache_mutex);
 
        return fr;
 }
@@ -324,6 +329,7 @@
        GdkRectangle *roi = rs_filter_request_get_roi(request);
        filter_debug("Cache[%p]: getimage8() called", filter);
 
+       g_mutex_lock(cache->cache_mutex);
        if (roi && cache->ignore_roi)
        {
                roi = NULL;
@@ -391,6 +397,7 @@
                g_object_unref(img);
 
        g_object_unref(request);
+       g_mutex_unlock(cache->cache_mutex);
 
        return fr;
 }
@@ -410,7 +417,9 @@
        RSCache *cache = RS_CACHE(filter);
 
        filter_debug("Cache[%p]: Previous Changed (%x)", filter, mask);
+       g_mutex_lock(cache->cache_mutex);
        if (mask & RS_FILTER_CHANGED_PIXELDATA)
                flush(cache);
+       g_mutex_unlock(cache->cache_mutex);
        rs_filter_changed(filter, mask);
 }


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to