mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
gst/gstbin.c: Explicitely make an element release locks in a group when being remove from a bin.
Original commit message from CVS: * gst/gstbin.c: (gst_bin_remove_func): Explicitely make an element release locks in a group when being remove from a bin. * gst/gstqueue.c: (gst_queue_chain), (gst_queue_get): If there's no scheduler, always return immediately (similar to gst_element_interrupt).
This commit is contained in:
parent
77bf6d8c0f
commit
6a4b9177e4
4 changed files with 28 additions and 8 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2005-02-01 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
||||||
|
* gst/gstbin.c: (gst_bin_remove_func):
|
||||||
|
Explicitely make an element release locks in a group when being
|
||||||
|
remove from a bin.
|
||||||
|
* gst/gstqueue.c: (gst_queue_chain), (gst_queue_get):
|
||||||
|
If there's no scheduler, always return immediately (similar to
|
||||||
|
gst_element_interrupt).
|
||||||
|
|
||||||
2005-01-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
2005-01-31 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
||||||
* gst/gstbin.c: (gst_bin_child_state_change_func):
|
* gst/gstbin.c: (gst_bin_child_state_change_func):
|
||||||
|
|
|
@ -555,6 +555,9 @@ gst_bin_remove_func (GstBin * bin, GstElement * element)
|
||||||
/* remove this element from the list of managed elements */
|
/* remove this element from the list of managed elements */
|
||||||
gst_bin_unset_element_sched (element, GST_ELEMENT_SCHED (bin));
|
gst_bin_unset_element_sched (element, GST_ELEMENT_SCHED (bin));
|
||||||
|
|
||||||
|
/* if it is still iterating, make it stop */
|
||||||
|
gst_element_release_locks (element);
|
||||||
|
|
||||||
/* now remove the element from the list of elements */
|
/* now remove the element from the list of elements */
|
||||||
bin->children = g_list_remove (bin->children, element);
|
bin->children = g_list_remove (bin->children, element);
|
||||||
bin->numchildren--;
|
bin->numchildren--;
|
||||||
|
|
|
@ -654,10 +654,12 @@ restart:
|
||||||
* or its manager, switch back to iterator so bottom
|
* or its manager, switch back to iterator so bottom
|
||||||
* half of state change executes */
|
* half of state change executes */
|
||||||
if (queue->interrupt) {
|
if (queue->interrupt) {
|
||||||
|
GstScheduler *sched;
|
||||||
|
|
||||||
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
||||||
GST_QUEUE_MUTEX_UNLOCK;
|
GST_QUEUE_MUTEX_UNLOCK;
|
||||||
if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->sinkpad),
|
sched = gst_pad_get_scheduler (queue->sinkpad);
|
||||||
GST_ELEMENT (queue))) {
|
if (!sched || gst_scheduler_interrupt (sched, GST_ELEMENT (queue))) {
|
||||||
goto out_unref;
|
goto out_unref;
|
||||||
}
|
}
|
||||||
/* if we got here because we were unlocked after a
|
/* if we got here because we were unlocked after a
|
||||||
|
@ -778,10 +780,12 @@ restart:
|
||||||
* manager, switch back to iterator so bottom half of state
|
* manager, switch back to iterator so bottom half of state
|
||||||
* change executes. */
|
* change executes. */
|
||||||
if (queue->interrupt) {
|
if (queue->interrupt) {
|
||||||
|
GstScheduler *sched;
|
||||||
|
|
||||||
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
||||||
GST_QUEUE_MUTEX_UNLOCK;
|
GST_QUEUE_MUTEX_UNLOCK;
|
||||||
if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->srcpad),
|
sched = gst_pad_get_scheduler (queue->srcpad);
|
||||||
GST_ELEMENT (queue)))
|
if (!sched || gst_scheduler_interrupt (sched, GST_ELEMENT (queue)))
|
||||||
return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT));
|
return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT));
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
|
@ -654,10 +654,12 @@ restart:
|
||||||
* or its manager, switch back to iterator so bottom
|
* or its manager, switch back to iterator so bottom
|
||||||
* half of state change executes */
|
* half of state change executes */
|
||||||
if (queue->interrupt) {
|
if (queue->interrupt) {
|
||||||
|
GstScheduler *sched;
|
||||||
|
|
||||||
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
||||||
GST_QUEUE_MUTEX_UNLOCK;
|
GST_QUEUE_MUTEX_UNLOCK;
|
||||||
if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->sinkpad),
|
sched = gst_pad_get_scheduler (queue->sinkpad);
|
||||||
GST_ELEMENT (queue))) {
|
if (!sched || gst_scheduler_interrupt (sched, GST_ELEMENT (queue))) {
|
||||||
goto out_unref;
|
goto out_unref;
|
||||||
}
|
}
|
||||||
/* if we got here because we were unlocked after a
|
/* if we got here because we were unlocked after a
|
||||||
|
@ -778,10 +780,12 @@ restart:
|
||||||
* manager, switch back to iterator so bottom half of state
|
* manager, switch back to iterator so bottom half of state
|
||||||
* change executes. */
|
* change executes. */
|
||||||
if (queue->interrupt) {
|
if (queue->interrupt) {
|
||||||
|
GstScheduler *sched;
|
||||||
|
|
||||||
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "interrupted");
|
||||||
GST_QUEUE_MUTEX_UNLOCK;
|
GST_QUEUE_MUTEX_UNLOCK;
|
||||||
if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->srcpad),
|
sched = gst_pad_get_scheduler (queue->srcpad);
|
||||||
GST_ELEMENT (queue)))
|
if (!sched || gst_scheduler_interrupt (sched, GST_ELEMENT (queue)))
|
||||||
return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT));
|
return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT));
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue