tee: First deactivate the pad and then remove it when releasing pads
authorSebastian Dröge <sebastian@centricular.com>
Thu, 24 Oct 2019 22:41:27 +0000 (01:41 +0300)
committerMathieu Duponchelle <mduponchelle1@gmail.com>
Thu, 24 Oct 2019 22:49:41 +0000 (22:49 +0000)
This reverts a96002bb28c21b30fb9338a4620ad20504c70aa5, which is not
necessary anymore. If we release the pad after removing it then none of
the deactivation code will actually be called because the pad has no
parent anymore, and we require a parent on the pad for deactivation to
happen.

This can then, among other things, cause a streaming thread to be still
stuck in a pad probe because the pad was never flushed, and waiting
there forever because now the pad will actually never be flushed anymore.

plugins/elements/gsttee.c

index 8b28a97aec47f712e8597d2983c6ddfa684cd05c..0ff7527d488fb3f9f3e2c67424a9773546ac417d 100644 (file)
@@ -460,12 +460,8 @@ gst_tee_release_pad (GstElement * element, GstPad * pad)
   }
   GST_OBJECT_UNLOCK (tee);
 
-  gst_object_ref (pad);
-  gst_element_remove_pad (GST_ELEMENT_CAST (tee), pad);
-
   gst_pad_set_active (pad, FALSE);
-
-  gst_object_unref (pad);
+  gst_element_remove_pad (GST_ELEMENT_CAST (tee), pad);
 
   if (changed) {
     gst_tee_notify_alloc_pad (tee);