bufferlist: fix buffer leak in _remove()
authorTim-Philipp Müller <tim@centricular.com>
Mon, 16 Jun 2014 19:29:56 +0000 (20:29 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Mon, 16 Jun 2014 19:29:56 +0000 (20:29 +0100)
gst/gstbufferlist.c

index 5f743a1..dca866c 100644 (file)
@@ -281,14 +281,21 @@ gst_buffer_list_insert (GstBufferList * list, gint idx, GstBuffer * buffer)
  * @idx: the index
  * @length: the amount to remove
  *
- * Remove @length buffers starting from @idx in @list. The following buffers are
- * moved to close the gap.
+ * Remove @length buffers starting from @idx in @list. The following buffers
+ * are moved to close the gap.
  */
 void
 gst_buffer_list_remove (GstBufferList * list, guint idx, guint length)
 {
+  GstBuffer *buf;
+  gint i;
+
   g_return_if_fail (GST_IS_BUFFER_LIST (list));
   g_return_if_fail (idx < list->array->len);
 
+  for (i = idx; i < idx + length; ++i) {
+    buf = g_array_index (list->array, GstBuffer *, i);
+    gst_buffer_unref (buf);
+  }
   g_array_remove_range (list->array, idx, length);
 }