<div dir="ltr">Dear Community,<br><br>We are working in an application that uses Python 2.7 and Gstreamer 0.10 to record dual-stream videos, called Galicaster. Lately we've been carrying out some stress tests because we were not happy with the app stability.<br>

<br>Galicaster does not free resources correctly after a recording. We have noticed this after discovering that the number of file descriptors open by Galicaster (in /proc/PID/fd) steadily grows with each recording. The underlying problem is that some resources open by the recording pipeline are never freed. For instance, sockets created by alsasink stay there after the pipeline is closed. This behaviour cannot be reproduced in C, only using python. In [1] you can see the full code used in the tests.<br>

<br>After studying the problem, we have found the bug is in gst.parse_bin_from_description(). Examples:<div><br></div><div><br><div class="gmail_quote"><div class="im"><strong style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px">Does not properly free its resources</strong><span style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px">:</span><div>

<br style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px"><pre style="white-space:pre-wrap;color:rgb(72,72,72);font-size:12px;margin-right:1em;margin-left:1.6em;padding:2px 2px 2px 0px;background-color:rgb(250,250,250);border:1px solid rgb(218,218,218);width:auto">

self.pipeline = gst.Pipeline()
aux = "audiotestsrc ! alsasink" 
self.bin = gst.parse_bin_from_description(aux, False)
self.pipeline.add(self.bin)  </pre></div></div><div><div class="im"><div style="font-family:arial,sans-serif;font-size:13px"><strong style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px">Frees resources properly</strong><span style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px">:</span><div>

<br style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px"><pre style="white-space:pre-wrap;color:rgb(72,72,72);font-size:12px;margin-right:1em;margin-left:1.6em;padding:2px 2px 2px 0px;background-color:rgb(250,250,250);border:1px solid rgb(218,218,218);width:auto">

self.pipeline = gst.Pipeline()
src = gst.element_factory_make('audiotestsrc')
sink = gst.element_factory_make('alsasink')   
mbin = gst.Bin()                              
mbin.add(src, sink)        
self.pipeline.add(mbin)    
src.link(sink)</pre></div></div><div style="font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px"><b>Frees resources properly</b>:</span><div><br style="color:rgb(72,72,72);font-family:Verdana,sans-serif;font-size:12px">

<pre style="white-space:pre-wrap;color:rgb(72,72,72);font-size:12px;margin-right:1em;margin-left:1.6em;padding:2px 2px 2px 0px;background-color:rgb(250,250,250);border:1px solid rgb(218,218,218);width:auto">self.pipeline = gst.Pipeline()
aux = "(audiotestsrc ! alsasink)" 
self.bin = gst.parse_launch(aux)  
self.pipeline.add(self.bin)</pre></div></div><br>We are using the last example as a workaround -- using gst.parse_launch and surrounding the description with brackets "()".<br><br>We are planning to port the application to Gstreamer 1.0 . We would like to know if this bug is known and/or fixed in the 1.0 version.<br>

</div><div class="" style="margin:2px 0px 0px;font-family:arial,sans-serif;font-size:13px"></div></div></div><div><br></div><div>--</div><div>Regards/Un Saludo<br><br>Ruben Gonzalez Gonzalez<br>TELTEK Video Research <br>
<a href="http://teltek.es/" target="_blank">http://teltek.es/</a><br>
</div>
</div></div>