[gimp] app: serialize signals from gimpoperationtilesink
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: serialize signals from gimpoperationtilesink
- Date: Fri, 17 Dec 2010 14:39:39 +0000 (UTC)
commit 44ceeb246e4db6e59f2e0eb245e96a0d3ae9a19d
Author: �yvind Kolås <pippin gimp org>
Date: Fri Dec 17 03:20:01 2010 +0000
app: serialize signals from gimpoperationtilesink
These signals fire from threads while the mainloop is blocked by GEGL, since
the callbacks of the signals expect exclusive access a mutex works for
serializing.
app/gegl/gimpoperationtilesink.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
---
diff --git a/app/gegl/gimpoperationtilesink.c b/app/gegl/gimpoperationtilesink.c
index f8f6395..7ea21fc 100644
--- a/app/gegl/gimpoperationtilesink.c
+++ b/app/gegl/gimpoperationtilesink.c
@@ -187,12 +187,14 @@ gimp_operation_tile_sink_set_property (GObject *object,
}
}
+
static gboolean
gimp_operation_tile_sink_process (GeglOperation *operation,
GeglBuffer *input,
const GeglRectangle *result)
{
GimpOperationTileSink *self = GIMP_OPERATION_TILE_SINK (operation);
+ static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
const Babl *format;
PixelRegion destPR;
gpointer pr;
@@ -218,7 +220,13 @@ gimp_operation_tile_sink_process (GeglOperation *operation,
1.0, &rect, format, destPR.data, destPR.rowstride);
}
+ g_static_mutex_lock (&mutex);
+ /* a lock here serializes all fired signals, this emit gets called from
+ * different worker threads, but the main loop will be blocked by GEGL
+ * when it happens
+ */
g_signal_emit (operation, tile_sink_signals[DATA_WRITTEN], 0, result);
+ g_static_mutex_unlock (&mutex);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]