From 3352c5d97042b21850439df2ca475c46c39a164b Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Thu, 6 Aug 2009 13:29:29 +0200 Subject: [PATCH] queue: post error message when pausing task If downstream returns error and upstream has already delivered everything (including EOS) and will no longer be around to find out that we paused (and why), post error message. Fixes #589991. --- plugins/elements/gstqueue.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 20380af..4200605 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -1159,11 +1159,24 @@ gst_queue_loop (GstPad * pad) /* ERRORS */ out_flushing: { + gboolean eos = queue->eos; + GstFlowReturn ret = queue->srcresult; + gst_pad_pause_task (queue->srcpad); GST_CAT_LOG_OBJECT (queue_dataflow, queue, - "pause task, reason: %s", gst_flow_get_name (queue->srcresult)); + "pause task, reason: %s", gst_flow_get_name (ret)); GST_QUEUE_SIGNAL_DEL (queue); GST_QUEUE_MUTEX_UNLOCK (queue); + /* let app know about us giving up if upstream is not expected to do so */ + /* UNEXPECTED is already taken care of elsewhere */ + if (eos && (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) && + (ret != GST_FLOW_UNEXPECTED)) { + GST_ELEMENT_ERROR (queue, STREAM, FAILED, + (_("Internal data flow error.")), + ("streaming task paused, reason %s (%d)", + gst_flow_get_name (ret), ret)); + gst_pad_push_event (queue->srcpad, gst_event_new_eos ()); + } return; } } -- 2.7.4