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