[gegl] sampler: only hold weak refs to buffers
- From: Michael Henning <mhenning src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] sampler: only hold weak refs to buffers
- Date: Mon, 8 Apr 2013 01:42:47 +0000 (UTC)
commit 2e41b3dda9fe896788ddbc6cac3f7b2e3018d531
Author: Michael Henning <drawoc darkrefraction com>
Date: Sun Apr 7 21:00:44 2013 -0400
sampler: only hold weak refs to buffers
this fixes the same leak that was fixed/reverted in the previous two commits
gegl/buffer/gegl-buffer.h | 3 +++
gegl/buffer/gegl-sampler.c | 5 +++--
2 files changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer.h b/gegl/buffer/gegl-buffer.h
index 931aee5..3fcdb26 100644
--- a/gegl/buffer/gegl-buffer.h
+++ b/gegl/buffer/gegl-buffer.h
@@ -483,6 +483,9 @@ GeglSamplerType gegl_sampler_type_from_string (const gchar *string);
*
* Create a new sampler, when you are done with the sampler, g_object_unref
* it.
+ *
+ * Samplers only hold weak references to buffers, so if its buffer is freed
+ * the sampler will become invalid.
*/
GeglSampler * gegl_buffer_sampler_new (GeglBuffer *buffer,
const Babl *format,
diff --git a/gegl/buffer/gegl-sampler.c b/gegl/buffer/gegl-sampler.c
index 1e905fe..e686187 100644
--- a/gegl/buffer/gegl-sampler.c
+++ b/gegl/buffer/gegl-sampler.c
@@ -511,12 +511,13 @@ set_buffer (GeglSampler *self, GeglBuffer *buffer)
g_signal_handlers_disconnect_by_func (self->buffer,
G_CALLBACK (buffer_contents_changed),
self);
- g_object_unref (self->buffer);
+ g_object_remove_weak_pointer (self->buffer, &self->buffer);
}
if (GEGL_IS_BUFFER (buffer))
{
- self->buffer = g_object_ref (buffer);
+ self->buffer = buffer;
+ g_object_add_weak_pointer (self->buffer, &self->buffer);
g_signal_connect (buffer, "changed",
G_CALLBACK (buffer_contents_changed),
self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]