[gegl] buffer: add a lock around cow dup/dedup
- From: Ãyvind KolÃs <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: add a lock around cow dup/dedup
- Date: Sat, 31 Mar 2012 17:11:44 +0000 (UTC)
commit bd4b91657287bfa646a382e64b3bbd0f6555d312
Author: Ãyvind KolÃs <pippin gimp org>
Date: Sat Mar 31 18:11:35 2012 +0100
buffer: add a lock around cow dup/dedup
gegl/buffer/gegl-tile.c | 13 +++++++++++++
operations/common/dropshadow.c | 2 +-
2 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile.c b/gegl/buffer/gegl-tile.c
index 655923a..d89d893 100644
--- a/gegl/buffer/gegl-tile.c
+++ b/gegl/buffer/gegl-tile.c
@@ -39,6 +39,7 @@
#include "gegl-utils.h"
+static GStaticMutex cowmutex = G_STATIC_MUTEX_INIT;
GeglTile *gegl_tile_ref (GeglTile *tile)
{
@@ -136,7 +137,17 @@ gegl_tile_dup (GeglTile *src)
g_mutex_lock (tile->next_shared->mutex);
}
#endif
+ if (tile->next_shared != src)
+ {
+ g_static_mutex_lock (&cowmutex);
+ }
+
tile->next_shared->prev_shared = tile;
+
+ if (tile->next_shared != src)
+ {
+ g_static_mutex_unlock (&cowmutex);
+ }
#ifdef GEGL_USE_TILE_MUTEX
if (tile->next_shared != src)
{
@@ -175,6 +186,7 @@ gegl_tile_unclone (GeglTile *tile)
/* the tile data is shared with other tiles,
* create a local copy
*/
+ g_static_mutex_lock (&cowmutex);
tile->data = gegl_memdup (tile->data, tile->size);
tile->destroy_notify = (void*)&free_data_directly;
tile->destroy_notify_data = NULL;
@@ -182,6 +194,7 @@ gegl_tile_unclone (GeglTile *tile)
tile->next_shared->prev_shared = tile->prev_shared;
tile->prev_shared = tile;
tile->next_shared = tile;
+ g_static_mutex_unlock (&cowmutex);
}
}
#if 0
diff --git a/operations/common/dropshadow.c b/operations/common/dropshadow.c
index 0f02b34..5a49dcb 100644
--- a/operations/common/dropshadow.c
+++ b/operations/common/dropshadow.c
@@ -22,7 +22,7 @@
#ifdef GEGL_CHANT_PROPERTIES
-gegl_chant_double (opacity, _("Opacity"), -1.0, 1.0, 0.5, _("Opacity"))
+gegl_chant_double (opacity, _("Opacity"), -2.0, 2.0, 0.5, _("Opacity"))
gegl_chant_double_ui (x, _("X"), -G_MAXDOUBLE, G_MAXDOUBLE, 20.0, -20.0, 20.0, 1.0,
_("Horizontal shadow offset."))
gegl_chant_double_ui (y, _("Y"), -G_MAXDOUBLE, G_MAXDOUBLE, 20.0, -20.0, 20.0, 1.0,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]