mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
gst/gstbus.c: Doc fix.
Original commit message from CVS: * gst/gstbus.c: Doc fix. * gst/gstqueue.c: (gst_queue_handle_sink_event), (gst_queue_chain), (gst_queue_loop): Fix potential deadlock when QUEUE_LOCK is taken before STREAM_LOCK.
This commit is contained in:
parent
5867dff97d
commit
bb8289979b
3 changed files with 13 additions and 29 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue