mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 04:22:27 +00:00
gst/gstelement.c: Fixed #326576, been running this for quite some time with no regressions at all.
Original commit message from CVS: * gst/gstelement.c: (gst_element_continue_state), (gst_element_set_state_func), (gst_element_change_state): Fixed #326576, been running this for quite some time with no regressions at all.
This commit is contained in:
parent
17015041c5
commit
e2e2bda0d3
3 changed files with 17 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2006-02-02 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* gst/gstelement.c: (gst_element_continue_state),
|
||||||
|
(gst_element_set_state_func), (gst_element_change_state):
|
||||||
|
Fixed #326576, been running this for quite some time with
|
||||||
|
no regressions at all.
|
||||||
|
|
||||||
2006-02-02 Wim Taymans <wim@fluendo.com>
|
2006-02-02 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* common/gst.supp:
|
* common/gst.supp:
|
||||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
||||||
Subproject commit b7d18dcce9b54e4861136e9b13bc7c2cd89d0ec7
|
Subproject commit 79d67fe009b6120b82d51df860c78e8361f02aea
|
|
@ -1896,6 +1896,8 @@ gst_element_continue_state (GstElement * element, GstStateChangeReturn ret)
|
||||||
transition = GST_STATE_TRANSITION (current, next);
|
transition = GST_STATE_TRANSITION (current, next);
|
||||||
|
|
||||||
GST_STATE_NEXT (element) = next;
|
GST_STATE_NEXT (element) = next;
|
||||||
|
/* mark busy */
|
||||||
|
GST_STATE_RETURN (element) = GST_STATE_CHANGE_ASYNC;
|
||||||
GST_OBJECT_UNLOCK (element);
|
GST_OBJECT_UNLOCK (element);
|
||||||
|
|
||||||
GST_CAT_INFO_OBJECT (GST_CAT_STATES, element,
|
GST_CAT_INFO_OBJECT (GST_CAT_STATES, element,
|
||||||
|
@ -2108,6 +2110,13 @@ gst_element_set_state_func (GstElement * element, GstState state)
|
||||||
next = GST_STATE_GET_NEXT (current, state);
|
next = GST_STATE_GET_NEXT (current, state);
|
||||||
/* now we store the next state */
|
/* now we store the next state */
|
||||||
GST_STATE_NEXT (element) = next;
|
GST_STATE_NEXT (element) = next;
|
||||||
|
/* mark busy, we need to check that there is actually a state change
|
||||||
|
* to be done else we could accidentally override SUCCESS/NO_PREROLL and
|
||||||
|
* the default element change_state function has no way to know what the
|
||||||
|
* old value was... could consider this a FIXME...*/
|
||||||
|
if (current != next)
|
||||||
|
GST_STATE_RETURN (element) = GST_STATE_CHANGE_ASYNC;
|
||||||
|
|
||||||
transition = GST_STATE_TRANSITION (current, next);
|
transition = GST_STATE_TRANSITION (current, next);
|
||||||
|
|
||||||
GST_CAT_DEBUG_OBJECT (GST_CAT_STATES, element,
|
GST_CAT_DEBUG_OBJECT (GST_CAT_STATES, element,
|
||||||
|
@ -2209,11 +2218,8 @@ gst_element_change_state (GstElement * element, GstStateChange transition)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
async:
|
async:
|
||||||
GST_OBJECT_LOCK (element);
|
|
||||||
GST_STATE_RETURN (element) = ret;
|
|
||||||
GST_CAT_LOG_OBJECT (GST_CAT_STATES, element, "exit async state change %d",
|
GST_CAT_LOG_OBJECT (GST_CAT_STATES, element, "exit async state change %d",
|
||||||
ret);
|
ret);
|
||||||
GST_OBJECT_UNLOCK (element);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue