[gimp] app: make GimpTileHandlerValidate thread safe
- From: N/A <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: make GimpTileHandlerValidate thread safe
- Date: Wed, 15 Nov 2017 16:52:16 +0000 (UTC)
commit 4bd118ec8ad857c8bab54ff9118937dd24d0a8e9
Author: Ell <ell_se yahoo com>
Date: Wed Nov 15 11:49:01 2017 -0500
app: make GimpTileHandlerValidate thread safe
Use a mutex to protect the call to
gimp_tile_handler_validate_validate() while fetching tiles, since
it's nowhere near thread safe.
app/gegl/gimptilehandlervalidate.c | 10 +++++++++-
app/gegl/gimptilehandlervalidate.h | 1 +
2 files changed, 10 insertions(+), 1 deletions(-)
---
diff --git a/app/gegl/gimptilehandlervalidate.c b/app/gegl/gimptilehandlervalidate.c
index c7feab1..71b91a7 100644
--- a/app/gegl/gimptilehandlervalidate.c
+++ b/app/gegl/gimptilehandlervalidate.c
@@ -106,6 +106,7 @@ gimp_tile_handler_validate_init (GimpTileHandlerValidate *validate)
source->command = gimp_tile_handler_validate_command;
+ g_mutex_init (&validate->mutex);
validate->dirty_region = cairo_region_create ();
}
@@ -116,6 +117,7 @@ gimp_tile_handler_validate_finalize (GObject *object)
g_clear_object (&validate->graph);
g_clear_pointer (&validate->dirty_region, cairo_region_destroy);
+ g_mutex_clear (&validate->mutex);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -321,7 +323,13 @@ gimp_tile_handler_validate_command (GeglTileSource *source,
retval = gegl_tile_handler_source_command (source, command, x, y, z, data);
if (command == GEGL_TILE_GET && z == 0)
- retval = gimp_tile_handler_validate_validate (source, retval, x, y);
+ {
+ g_mutex_lock (&validate->mutex);
+
+ retval = gimp_tile_handler_validate_validate (source, retval, x, y);
+
+ g_mutex_unlock (&validate->mutex);
+ }
return retval;
}
diff --git a/app/gegl/gimptilehandlervalidate.h b/app/gegl/gimptilehandlervalidate.h
index 5e2bda8..542deed 100644
--- a/app/gegl/gimptilehandlervalidate.h
+++ b/app/gegl/gimptilehandlervalidate.h
@@ -42,6 +42,7 @@ struct _GimpTileHandlerValidate
{
GeglTileHandler parent_instance;
+ GMutex mutex;
GeglNode *graph;
cairo_region_t *dirty_region;
const Babl *format;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]