typefind: Only push a CAPS event downstream if the sinkpad is not in PULL mode
authorSebastian Dröge <sebastian@centricular.com>
Wed, 11 May 2016 12:06:39 +0000 (15:06 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 11 May 2016 12:06:39 +0000 (15:06 +0300)
The other signal handlers of the type-found signal might have reactivated
typefind in PULL mode already, pushing a CAPS event at that point would cause
deadlocks and is in general unexpected by elements that are in PULL mode.

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

plugins/elements/gsttypefindelement.c

index c686412..453ff75 100644 (file)
@@ -179,6 +179,10 @@ gst_type_find_element_have_type (GstTypeFindElement * typefind,
   GST_INFO_OBJECT (typefind, "found caps %" GST_PTR_FORMAT ", probability=%u",
       caps, probability);
 
+  /* Do nothing if downstream is pulling from us */
+  if (GST_PAD_MODE (typefind->src) == GST_PAD_MODE_PULL)
+    return;
+
   GST_OBJECT_LOCK (typefind);
 
   /* Now actually send the CAPS event downstream.