<div dir="ltr">Hi everyone.<div><br></div><div>I'm developing a video storage and streaming server for ip cameras based on gstreamer and python. It's multithreaded daemon which launches 2 threads for each cam ( recorder and streamer). Recently I found out that upon EOS or error gstreamer pipepeline leaves some orphaned opened sockets in the system. This is very painfull because I have to run 30-50 cams per server 24/7. I already raised all limits to maximum on my linux setup, but other libraries like asyncore are failing when opened file count > 1024.I tried changing my pipeline to the most simple one, but the problem persist. Maybe I fail to release the pipeline correctly? Here's the sample code</div><div><br><a href="http://pastebin.com/isk6KsA9">http://pastebin.com/isk6KsA9</a><br><br></div><div>I blame the kill() function:<br><br>   def kill(self):<br>    if self.pipeline:<br>           self.sink.emit('clear')<br>           self.bus.remove_signal_watch()<br>        <br>           self.pipeline.set_state(Gst.State.NULL)<br>           state = self.pipeline.get_state(timeout=1*Gst.SECOND)<br>           while state[1] != Gst.State.NULL:<br>            self.remove_all()<br>            state = self.pipeline.get_state(timeout=1*Gst.SECOND)<br>    <br>    <br>        if self.ping_test(self.host) == 0:<br>            self.state = -2<br>            else:<br>            self.state = -1<br>            <br>            self.timestamp = None<br>    <br>        self.mainloop.quit()<br>    <br>    elif self.mainloop.is_running():<br>        self.mainloop.quit()<br>        <br></div><div><br></div></div>