Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-07-09 15:45:07 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-07-09 15:45:07 +0400
commit4e6a54e60b714780a58d01a5ab19bd86586886da (patch)
treeed93fa6fb0e68597e3bb152676f6de15bb78b66b
parent882269cb2c43976fdb5b6619ce0a57f7771cbc91 (diff)
Tomato: fix for mask cache
That used to be a threading issue when two different operations were allowed to access the same mask's cache. Now use lock in BKE_mask_rasterize_layers so that should work fine now.
-rw-r--r--source/blender/blenkernel/intern/mask.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index a152fb900cf..072d10d35cb 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -59,6 +59,9 @@
#include "raskter.h"
#ifdef USE_MANGO_MASK_CACHE_HACK
+
+#include "BLI_threads.h"
+
typedef struct MaskRasterCache {
float *buffer;
int width, height;
@@ -2321,6 +2324,8 @@ void BKE_mask_rasterize_layers(Mask *mask, ListBase *masklayers, int width, int
float *buffer_tmp;
#ifdef USE_MANGO_MASK_CACHE_HACK
+ BLI_lock_thread(LOCK_CUSTOM1);
+
if (cache &&
cache->width == width &&
cache->height == height &&
@@ -2330,10 +2335,13 @@ void BKE_mask_rasterize_layers(Mask *mask, ListBase *masklayers, int width, int
mask_layers_compare(&cache->layers, &mask->masklayers))
{
memcpy(buffer, cache->buffer, sizeof(float) * buffer_size);
+
+ BLI_unlock_thread(LOCK_CUSTOM1);
+
return;
}
- BKE_mask_raster_cache_free(mask);
+ BLI_unlock_thread(LOCK_CUSTOM1);
#endif
buffer_tmp = MEM_mallocN(sizeof(float) * buffer_size, __func__);
@@ -2462,6 +2470,10 @@ void BKE_mask_rasterize_layers(Mask *mask, ListBase *masklayers, int width, int
MEM_freeN(buffer_tmp);
#ifdef USE_MANGO_MASK_CACHE_HACK
+ BLI_lock_thread(LOCK_CUSTOM1);
+
+ BKE_mask_raster_cache_free(mask);
+
cache = MEM_callocN(sizeof(MaskRasterCache), "mask raster cache");
cache->buffer = MEM_mallocN(sizeof(float) * buffer_size, "mask raster cache buffer");
@@ -2477,6 +2489,8 @@ void BKE_mask_rasterize_layers(Mask *mask, ListBase *masklayers, int width, int
cache->do_feather = do_feather;
mask->raster_cache = cache;
+
+ BLI_unlock_thread(LOCK_CUSTOM1);
#endif
}