[gegl] sampler: only hold weak refs to buffers



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]