if (GST_EVENT_IS_SERIALIZED (event)) {
/* serialized events go in the queue */
GST_QUEUE2_MUTEX_LOCK_CHECK (queue, queue->sinkresult, out_flushing);
+ if (queue->srcresult != GST_FLOW_OK) {
+ /* Errors in sticky event pushing are no problem and ignored here
+ * as they will cause more meaningful errors during data flow.
+ * For EOS events, that are not followed by data flow, we still
+ * return FALSE here though and report an error.
+ */
+ if (!GST_EVENT_IS_STICKY (event)) {
+ goto out_flow_error;
+ } else if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
+ if (queue->srcresult == GST_FLOW_NOT_LINKED
+ || queue->srcresult < GST_FLOW_EOS) {
+ GST_ELEMENT_ERROR (queue, STREAM, FAILED,
+ (_("Internal data flow error.")),
+ ("streaming task paused, reason %s (%d)",
+ gst_flow_get_name (queue->srcresult), queue->srcresult));
+ }
+ goto out_flow_error;
+ }
+ }
/* refuse more events on EOS */
if (queue->is_eos)
goto out_eos;
gst_event_unref (event);
return FALSE;
}
+out_flow_error:
+ {
+ GST_LOG_OBJECT (queue,
+ "refusing event, we have a downstream flow error: %s",
+ gst_flow_get_name (queue->srcresult));
+ GST_QUEUE2_MUTEX_UNLOCK (queue);
+ gst_event_unref (event);
+ return FALSE;
+ }
}
static gboolean