audioaggregator: fix buffer leak
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 19 May 2016 08:16:37 +0000 (11:16 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 21 Jun 2016 07:52:47 +0000 (10:52 +0300)
If the pad was still owning a buffer when being destroyed it was leaked.

Fix a leak with the test_flush_start_flush_stop test.

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

gst-libs/gst/audio/gstaudioaggregator.c

index 5d7e8d6..a09b8a4 100644 (file)
@@ -79,12 +79,24 @@ gst_audio_aggregator_pad_flush_pad (GstAggregatorPad * aggpad,
     GstAggregator * aggregator);
 
 static void
+gst_audio_aggregator_pad_finalize (GObject * object)
+{
+  GstAudioAggregatorPad *pad = (GstAudioAggregatorPad *) object;
+
+  gst_buffer_replace (&pad->priv->buffer, NULL);
+
+  G_OBJECT_CLASS (gst_audio_aggregator_pad_parent_class)->finalize (object);
+}
+
+static void
 gst_audio_aggregator_pad_class_init (GstAudioAggregatorPadClass * klass)
 {
+  GObjectClass *gobject_class = (GObjectClass *) klass;
   GstAggregatorPadClass *aggpadclass = (GstAggregatorPadClass *) klass;
 
   g_type_class_add_private (klass, sizeof (GstAudioAggregatorPadPrivate));
 
+  gobject_class->finalize = gst_audio_aggregator_pad_finalize;
   aggpadclass->flush = GST_DEBUG_FUNCPTR (gst_audio_aggregator_pad_flush_pad);
 }