audio-source: unref private capsfilter reference on dispose
authorAurélien Zanelli <aurelien.zanelli@darkosphere.fr>
Mon, 16 May 2016 15:36:36 +0000 (17:36 +0200)
committerThibault Saunier <tsaunier@gnome.org>
Mon, 16 May 2016 17:21:12 +0000 (13:21 -0400)
Otherwise a capsfilter reference will be leaked since it has been got
using gst_bin_get_by_name.

https://bugzilla.gnome.org/show_bug.cgi?id=766524

ges/ges-audio-source.c

index 21ec2b2..a52dbf8 100644 (file)
@@ -167,13 +167,28 @@ ges_audio_source_create_element (GESTrackElement * trksrc)
 }
 
 static void
+ges_audio_source_dispose (GObject * object)
+{
+  GESAudioSource *self = GES_AUDIO_SOURCE (object);
+
+  if (self->priv->capsfilter) {
+    gst_object_unref (self->priv->capsfilter);
+    self->priv->capsfilter = NULL;
+  }
+
+  G_OBJECT_CLASS (ges_audio_source_parent_class)->dispose (object);
+}
+
+static void
 ges_audio_source_class_init (GESAudioSourceClass * klass)
 {
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GESTrackElementClass *track_class = GES_TRACK_ELEMENT_CLASS (klass);
   GESAudioSourceClass *audio_source_class = GES_AUDIO_SOURCE_CLASS (klass);
 
   g_type_class_add_private (klass, sizeof (GESAudioSourcePrivate));
 
+  gobject_class->dispose = ges_audio_source_dispose;
   track_class->nleobject_factorytype = "nlesource";
   track_class->create_element = ges_audio_source_create_element;
   audio_source_class->create_source = NULL;