diff --git a/gst/gstbus.c b/gst/gstbus.c index a402c67cd8..adaffdfb4e 100644 --- a/gst/gstbus.c +++ b/gst/gstbus.c @@ -39,7 +39,7 @@ * convert all bus messages into signal emissions. * * A message is posted on the bus with the gst_bus_post() method. With the - * gst_bus_peek() and _pop() methods one can look at or retrieve a previously + * gst_bus_peek() and gst_bus_pop() methods one can look at or retrieve a previously * posted message. * * The bus can be polled with the gst_bus_poll() method. This methods blocks diff --git a/gst/gstqueue.c b/gst/gstqueue.c index 1e6b518259..d8569e6fd0 100644 --- a/gst/gstqueue.c +++ b/gst/gstqueue.c @@ -522,8 +522,7 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: STATUS (queue, "received flush start event"); - /* forward event, ref first as we're going to use it still */ - gst_event_ref (event); + /* forward event */ gst_pad_push_event (queue->srcpad, event); /* now unblock the chain function */ @@ -537,12 +536,10 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) /* make sure it pauses */ gst_pad_pause_task (queue->srcpad); GST_CAT_LOG_OBJECT (queue_dataflow, queue, "loop stopped"); - gst_event_unref (event); goto done; case GST_EVENT_FLUSH_STOP: STATUS (queue, "received flush stop event"); - /* forward event, ref first as we're going to use it still */ - gst_event_ref (event); + /* forward event */ gst_pad_push_event (queue->srcpad, event); GST_QUEUE_MUTEX_LOCK (queue); @@ -557,7 +554,6 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) GST_QUEUE_MUTEX_UNLOCK (queue); STATUS (queue, "after flush"); - gst_event_unref (event); goto done; case GST_EVENT_EOS: STATUS (queue, "received EOS"); @@ -568,9 +564,7 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) GST_CAT_LOG_OBJECT (queue_dataflow, queue, "adding event %p of type %d", event, GST_EVENT_TYPE (event)); } else { - gst_event_ref (event); gst_pad_push_event (queue->srcpad, event); - gst_event_unref (event); goto done; } break; @@ -739,11 +733,9 @@ out_unref: out_flushing: { GstFlowReturn ret = queue->srcresult; - const gchar *flowname = gst_flow_get_name (ret); - gst_pad_pause_task (queue->srcpad); GST_CAT_LOG_OBJECT (queue_dataflow, queue, - "exit because task paused, reason: %s", flowname); + "exit because task paused, reason: %s", gst_flow_get_name (ret)); GST_QUEUE_MUTEX_UNLOCK (queue); gst_buffer_unref (buffer); @@ -810,9 +802,9 @@ restart: GST_QUEUE_MUTEX_UNLOCK (queue); result = gst_pad_push (pad, GST_BUFFER (data)); - GST_QUEUE_MUTEX_LOCK (queue); - /* can opt to check for srcresult here but the push should - * return an error value that is more accurate */ + /* need to check for srcresult here as well */ + GST_QUEUE_MUTEX_LOCK_CHECK (queue, out_flushing); + /* else result of push indicates what happens */ if (result != GST_FLOW_OK) { const gchar *flowname; diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 1e6b518259..d8569e6fd0 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -522,8 +522,7 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: STATUS (queue, "received flush start event"); - /* forward event, ref first as we're going to use it still */ - gst_event_ref (event); + /* forward event */ gst_pad_push_event (queue->srcpad, event); /* now unblock the chain function */ @@ -537,12 +536,10 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) /* make sure it pauses */ gst_pad_pause_task (queue->srcpad); GST_CAT_LOG_OBJECT (queue_dataflow, queue, "loop stopped"); - gst_event_unref (event); goto done; case GST_EVENT_FLUSH_STOP: STATUS (queue, "received flush stop event"); - /* forward event, ref first as we're going to use it still */ - gst_event_ref (event); + /* forward event */ gst_pad_push_event (queue->srcpad, event); GST_QUEUE_MUTEX_LOCK (queue); @@ -557,7 +554,6 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) GST_QUEUE_MUTEX_UNLOCK (queue); STATUS (queue, "after flush"); - gst_event_unref (event); goto done; case GST_EVENT_EOS: STATUS (queue, "received EOS"); @@ -568,9 +564,7 @@ gst_queue_handle_sink_event (GstPad * pad, GstEvent * event) GST_CAT_LOG_OBJECT (queue_dataflow, queue, "adding event %p of type %d", event, GST_EVENT_TYPE (event)); } else { - gst_event_ref (event); gst_pad_push_event (queue->srcpad, event); - gst_event_unref (event); goto done; } break; @@ -739,11 +733,9 @@ out_unref: out_flushing: { GstFlowReturn ret = queue->srcresult; - const gchar *flowname = gst_flow_get_name (ret); - gst_pad_pause_task (queue->srcpad); GST_CAT_LOG_OBJECT (queue_dataflow, queue, - "exit because task paused, reason: %s", flowname); + "exit because task paused, reason: %s", gst_flow_get_name (ret)); GST_QUEUE_MUTEX_UNLOCK (queue); gst_buffer_unref (buffer); @@ -810,9 +802,9 @@ restart: GST_QUEUE_MUTEX_UNLOCK (queue); result = gst_pad_push (pad, GST_BUFFER (data)); - GST_QUEUE_MUTEX_LOCK (queue); - /* can opt to check for srcresult here but the push should - * return an error value that is more accurate */ + /* need to check for srcresult here as well */ + GST_QUEUE_MUTEX_LOCK_CHECK (queue, out_flushing); + /* else result of push indicates what happens */ if (result != GST_FLOW_OK) { const gchar *flowname;