Commit 0accb7f7 authored by Thiago Santos's avatar Thiago Santos
Browse files

concat: dot not reset pad states too early

Resetting the flushing state of the pads at the end of the
PAUSED_TO_READY transition will make pads handle serialized
queries again which will wait for non-active pads and might
cause deadlocks when stopping the pipeline.

Move the reset to the READY_TO_PAUSED instead.

https://bugzilla.gnome.org/show_bug.cgi?id=752623
parent c97f82e3
......@@ -797,47 +797,35 @@ gst_concat_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_READY_TO_PAUSED:{
GstIterator *iter = gst_element_iterate_sink_pads (element);
GstIteratorResult res;
self->format = GST_FORMAT_UNDEFINED;
self->current_start_offset = 0;
self->last_stop = GST_CLOCK_TIME_NONE;
break;
}
case GST_STATE_CHANGE_PAUSED_TO_READY:{
GstIterator *iter = gst_element_iterate_sink_pads (element);
GstIteratorResult res;
g_mutex_lock (&self->lock);
do {
res = gst_iterator_foreach (iter, unblock_pad, NULL);
res = gst_iterator_foreach (iter, reset_pad, NULL);
} while (res == GST_ITERATOR_RESYNC);
gst_iterator_free (iter);
g_cond_broadcast (&self->cond);
g_mutex_unlock (&self->lock);
if (res == GST_ITERATOR_ERROR)
return GST_STATE_CHANGE_FAILURE;
break;
}
default:
break;
}
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
if (ret == GST_STATE_CHANGE_FAILURE)
return ret;
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:{
GstIterator *iter = gst_element_iterate_sink_pads (element);
GstIteratorResult res;
g_mutex_lock (&self->lock);
do {
res = gst_iterator_foreach (iter, reset_pad, NULL);
res = gst_iterator_foreach (iter, unblock_pad, NULL);
} while (res == GST_ITERATOR_RESYNC);
gst_iterator_free (iter);
g_cond_broadcast (&self->cond);
g_mutex_unlock (&self->lock);
if (res == GST_ITERATOR_ERROR)
return GST_STATE_CHANGE_FAILURE;
......@@ -848,5 +836,7 @@ gst_concat_change_state (GstElement * element, GstStateChange transition)
break;
}
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
return ret;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment