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:
Wim Taymans 2006-02-02 13:58:12 +00:00
parent 17015041c5
commit e2e2bda0d3
3 changed files with 17 additions and 4 deletions

View file

@ -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>
* common/gst.supp:

2
common

@ -1 +1 @@
Subproject commit b7d18dcce9b54e4861136e9b13bc7c2cd89d0ec7
Subproject commit 79d67fe009b6120b82d51df860c78e8361f02aea

View file

@ -1896,6 +1896,8 @@ gst_element_continue_state (GstElement * element, GstStateChangeReturn ret)
transition = GST_STATE_TRANSITION (current, next);
GST_STATE_NEXT (element) = next;
/* mark busy */
GST_STATE_RETURN (element) = GST_STATE_CHANGE_ASYNC;
GST_OBJECT_UNLOCK (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);
/* now we store the next state */
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);
GST_CAT_DEBUG_OBJECT (GST_CAT_STATES, element,
@ -2209,11 +2218,8 @@ gst_element_change_state (GstElement * element, GstStateChange transition)
return ret;
async:
GST_OBJECT_LOCK (element);
GST_STATE_RETURN (element) = ret;
GST_CAT_LOG_OBJECT (GST_CAT_STATES, element, "exit async state change %d",
ret);
GST_OBJECT_UNLOCK (element);
return ret;