<div dir="ltr"><div>I have an application that worked fine on Ubuntu 16.04 but now hangs on Ubuntu 18.04 when I try to stop my pipeline.</div><div><br></div><div>Here is how I am initializing my pipeline;:</div><div><br></div><div>self.recorderBin = Gst.parse_bin_from_description(RECORD_PIPELINE, False)</div><div>self.recorderPipeline = Gst.Pipeline()</div><div>self.recorderPipeline.add(self.recorderBin)</div><div>bus = self.recorderPipeline.get_bus()</div><div>bus.add_watch(GLib.PRIORITY_DEFAULT, self._on_message)</div><div><br></div><div>At some point, the application starts recording and the bus is set into the PLAYING state which succeeds, recording begins.<br></div><div><br></div><div>Now when the user presses the stop button:</div><div><br></div><div>self.recorderPipeline.send_event(Gst.Event.new_eos())</div><div><br></div><div>When the EOS is sent to the bus and self._on_message is triggered and caught:</div><div><br></div><div>self.recorderPipeline.set_state(Gst.State.NULL)</div><div>HANG</div><div><br></div><div>Am I doing something wrong? I looked at the gst-launch-1.0 code and it seems to be using an event_loop() that polls for messages instead of the callback approach above. Also, gst-launch-1.0 PAUSES the bus, sets the bus state back into the READY state, before actually setting it to the NULL state, de-referencing it, and exiting. I actually tried it that as well but when I set the bus state to PAUSE then READY is hangs again.</div><div><br></div><div>Why does the Python code above hang when setting the state while the C code seems to work? Do I need to poll for bus messages and not rely on the auto main loop created underneath me? I can't find a singe Python example that polls for messages. Almost all of them are some flavor of connecting to the bus via callbacks.</div><div><br></div><div>Some guidance would be appreciated,<br></div><div><br></div><div>-aps<br></div><div><br></div><br><div><br></div><div><br></div><div><br></div><div><br></div></div>