multifilesink: don't leak memory when no max-files limit is set
authorUrsula Maplehurst <ursula@kangatronix.co.uk>
Sun, 29 May 2016 16:21:47 +0000 (17:21 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 31 Dec 2016 09:58:28 +0000 (09:58 +0000)
Technically we weren't leaking the memory, just storing it internally
and never using it until the element is freed. But we'd still use more
and more memory over time, so this is not good over longer periods
of time. Only keep track of files if there's actually a limit set,
so that we will prune the list from time to time.

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

gst/multifile/gstmultifilesink.c

index 2b83c0b..8a70f50 100644 (file)
@@ -1098,8 +1098,14 @@ gst_multi_file_sink_open_next_file (GstMultiFileSink * multifilesink)
   }
 
   GST_INFO_OBJECT (multifilesink, "opening file %s", filename);
-  multifilesink->files = g_slist_append (multifilesink->files, filename);
-  multifilesink->n_files += 1;
+
+  /* Only add file to the list if max_files > 0, otherwise this leaks memory */
+  if (multifilesink->max_files) {
+    multifilesink->files = g_slist_append (multifilesink->files, filename);
+    multifilesink->n_files += 1;
+  } else {
+    g_free (filename);
+  }
 
   multifilesink->cur_file_size = 0;
   return TRUE;