Bug#752623: memory leak in the "gst-plugins-bad1.0-1.2.4" package

Jan Karabel honzisk at gmail.com
Wed Jun 25 09:06:42 UTC 2014


Package: gst-plugins-bad1.0
Version: 1.2.4 wheezy-backports


Software for recording TV from DVB stick, using
gst-plugins-bad1.0-1.2.4 package from "wheezy-backports" repository,
eats in couple of days all memory available and fails. Leak seems to
be present till current 1.3.x versions.
Problem is in the "libgstmpegtsdemux.so" library - source file
"mpegtspacketizer.c" is using "g_malloc" without corresponding
"g_free".



Valgrind output:

==1601== 2,940,057 bytes in 729 blocks are definitely lost in loss
record 2,549 of 2,549
==1601==    at 0x4028308: malloc (vg_replace_malloc.c:263)
==1601==    by 0x42FB42A: ??? (in /lib/i386-linux-gnu/libglib-2.0.so.0.3200.4)
==1601==    by 0x42FB7A2: g_malloc (in
/lib/i386-linux-gnu/libglib-2.0.so.0.3200.4)
==1601==    by 0x79612F7: mpegts_packetizer_push_section
(mpegtspacketizer.c:1154)
==1601==    by 0x79688D7: mpegts_base_chain (mpegtsbase.c:1179)
==1601==    by 0x485FBDB: gst_pad_push_data (gstpad.c:3827)
==1601==    by 0x792A467: gst_queue_loop (gstqueue.c:1118)
==1601==    by 0x48937BF: gst_task_func (gsttask.c:317)
==1601==    by 0x4894A17: default_func (gsttaskpool.c:68)
==1601==    by 0x431A887: ??? (in /lib/i386-linux-gnu/libglib-2.0.so.0.3200.4)
==1601==    by 0x4319EB2: ??? (in /lib/i386-linux-gnu/libglib-2.0.so.0.3200.4)
==1601==    by 0x4B0BD4D: clone (clone.S:130)



Quick and dirty fix, successfully tested on 1.2.4 version (use of
"mpegts_packetizer_stream_free" would be probably better):
**************************************************************
--- a/gst/mpegtsdemux/mpegtspacketizer.c        2014-02-14
12:53:21.000000000 +0100
+++ b/gst/mpegtsdemux/mpegtspacketizer.c        2014-06-25
00:24:25.118573067 +0200
@@ -957,6 +957,8 @@
     packetizer->streams[packet->pid] = stream;
   }

+  stream->section_data = NULL;
+
   GST_MEMDUMP ("Full packet data", packet->data,
       packet->data_end - packet->data);

@@ -1197,11 +1199,17 @@
   goto accumulate_data;

 out:
+
+  if(stream != NULL && stream->section_data != NULL)
+  {
+         g_free(stream->section_data);
+         stream->section_data = NULL;
+  }
+
   packet->data = data;
   *remaining = others;

   GST_DEBUG ("result: %p", res);
-
   return res;
 }
**************************************************************

System is an up-to-date "Debian Wheezy" distribution on "3.15.1" kernel.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-gstreamer-maintainers/attachments/20140625/dbdf6476/attachment.html>


More information about the pkg-gstreamer-maintainers mailing list