From 82bd77e24b2042c7d046e9ef5c3e46eb96959fb2 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 16 May 2011 23:14:53 +0200 Subject: [PATCH] Fixed use of callbacks to prevent removeall of broken output from stopping playback --- mopidy/gstreamer.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mopidy/gstreamer.py b/mopidy/gstreamer.py index 0e866135..36fda08b 100644 --- a/mopidy/gstreamer.py +++ b/mopidy/gstreamer.py @@ -283,17 +283,18 @@ class GStreamer(ThreadingActor): return [output.get_name() for output in self._outputs] def remove_output(self, output): - logger.debug('Trying to remove %s', output.get_name()) if output not in self._outputs: return # FIXME raise mopidy exception of some sort? - src = self._taginject.get_pad('src') + src = output.get_pad('sink').get_peer() src.set_blocked_async(True, self._blocked_callback, output) def _blocked_callback(self, pad, blocked, output): gst.element_unlink_many(self._tee, output) + pad.set_blocked_async(False, self._unblocked_callback, output) + + def _unblocked_callback(self, pad, blocked, output): output.set_state(gst.STATE_NULL) self._pipeline.remove(output) - pad.set_blocked(False) self._outputs.remove(output) logger.warning(u'Removed %s', output.get_name())