flacparse: fix buffer leak when stored to seektable
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 7 May 2015 14:25:36 +0000 (16:25 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 8 May 2015 10:11:40 +0000 (11:11 +0100)
Fix a leak with the
validate.file.playback.change_state_intensive.samples_multimedia_cx_flac_Yesterday_flac
scenario.

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

gst/audioparsers/gstflacparse.c

index 51e1bfc..93ff7bd 100644 (file)
@@ -305,6 +305,10 @@ gst_flac_parse_finalize (GObject * object)
     gst_toc_unref (flacparse->toc);
     flacparse->toc = NULL;
   }
+  if (flacparse->seektable) {
+    gst_buffer_unref (flacparse->seektable);
+    flacparse->seektable = NULL;
+  }
 
   g_list_foreach (flacparse->headers, (GFunc) gst_mini_object_unref, NULL);
   g_list_free (flacparse->headers);
@@ -1163,6 +1167,8 @@ gst_flac_parse_handle_seektable (GstFlacParse * flacparse, GstBuffer * buffer)
   GST_DEBUG_OBJECT (flacparse, "storing seektable");
   /* only store for now;
    * offset of the first frame is needed to get real info */
+  if (flacparse->seektable)
+    gst_buffer_unref (flacparse->seektable);
   flacparse->seektable = gst_buffer_ref (buffer);
 
   return TRUE;