From: <wt...@ke...> - 2009-03-05 10:36:59
|
Module: gstreamer Branch: master Commit: fe2f12b162d66d089af8610444d9f8b28bde0cf7 URL: http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=fe2f12b162d66d089af8610444d9f8b28bde0cf7 Author: Antoine Tremblay <he...@gm...> Date: Thu Mar 5 11:29:48 2009 +0100 GstPad: relax failure to deactivate unlinked pads When de/activating a pad in pull mode the pad needs to de/activate the peer pad it is connected to, failure to be able to do this in activation mode is an error. However if there is no peerpad, we can still deactivate the pad correctly and assume the application will deactivate the unlinked peer pad eventually. Fixes #574163. --- gst/gstpad.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/gst/gstpad.c b/gst/gstpad.c index cd5540e..9c0ca2d 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -767,7 +767,13 @@ gst_pad_activate_pull (GstPad * pad, gboolean active) goto peer_failed; gst_object_unref (peer); } else { - goto not_linked; + /* there is no peer, this is only fatal when we activate. When we + * deactivate, we must assume the application has unlinked the peer and + * will deactivate it eventually. */ + if (active) + goto not_linked; + else + GST_DEBUG_OBJECT (pad, "deactivating unlinked pad"); } } else { if (G_UNLIKELY (GST_PAD_GETRANGEFUNC (pad) == NULL)) |