tee: Properly handle return value when only 1 pad
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 8 Jun 2016 16:34:53 +0000 (12:34 -0400)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 17 Jun 2016 10:03:20 +0000 (13:03 +0300)
This patch handle the case when you have 1 pad (so the fast path is
being used) but this pad is removed. If we are in allow-not-linked, we
should return GST_FLOW_OK, otherwise, we should return GST_FLOW_UNLINKED
and ignore the meaningless return value obtained from pushing.

https://bugzilla.gnome.org/show_bug.cgi?id=767413

plugins/elements/gsttee.c

index 78cbff7..361a15c 100644 (file)
@@ -656,12 +656,15 @@ gst_tee_handle_data (GstTee * tee, gpointer data, gboolean is_list)
       ret = gst_pad_push (pad, GST_BUFFER_CAST (data));
     }
 
-    gst_object_unref (pad);
+    if (GST_TEE_PAD_CAST (pad)->removed)
+      ret = GST_FLOW_NOT_LINKED;
 
     if (ret == GST_FLOW_NOT_LINKED && tee->allow_not_linked) {
       ret = GST_FLOW_OK;
     }
 
+    gst_object_unref (pad);
+
     return ret;
   }