mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 15:08:53 +00:00
Added a missing state change switch.
Original commit message from CVS: Added a missing state change switch. Uncommented a big FIXME that was needed after all. Stop now works.
This commit is contained in:
parent
74d5b03f03
commit
3526156fe7
1 changed files with 22 additions and 4 deletions
|
@ -446,8 +446,8 @@ gst_thread_change_state (GstElement *element)
|
||||||
{
|
{
|
||||||
THR_DEBUG("telling thread to pause (null) - and joining\n");
|
THR_DEBUG("telling thread to pause (null) - and joining\n");
|
||||||
//MattH FIXME revisit
|
//MattH FIXME revisit
|
||||||
// g_mutex_lock(thread->lock);
|
g_mutex_lock(thread->lock);
|
||||||
// gst_thread_signal_thread(thread,FALSE);
|
gst_thread_signal_thread(thread,FALSE);
|
||||||
pthread_join(thread->thread_id,NULL);
|
pthread_join(thread->thread_id,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,9 +456,27 @@ gst_thread_change_state (GstElement *element)
|
||||||
GST_FLAG_UNSET(thread,GST_THREAD_STATE_SPINNING);
|
GST_FLAG_UNSET(thread,GST_THREAD_STATE_SPINNING);
|
||||||
GST_FLAG_UNSET(thread,GST_THREAD_STATE_ELEMENT_CHANGED);
|
GST_FLAG_UNSET(thread,GST_THREAD_STATE_ELEMENT_CHANGED);
|
||||||
|
|
||||||
if (GST_ELEMENT_CLASS (parent_class)->change_state)
|
break;
|
||||||
stateset = GST_ELEMENT_CLASS (parent_class)->change_state (GST_ELEMENT(thread));
|
case GST_STATE_PAUSED_TO_READY:
|
||||||
|
THR_INFO("stopping thread");
|
||||||
|
|
||||||
|
// check to see if the thread is somehow changing its own state.
|
||||||
|
// FIXME this is currently illegal, but must somehow be made legal at some point.
|
||||||
|
if (pthread_equal(self, thread->thread_id))
|
||||||
|
{
|
||||||
|
//FIXME this should not happen
|
||||||
|
g_assert(!pthread_equal(self, thread->thread_id));
|
||||||
|
GST_FLAG_SET(thread, GST_THREAD_STATE_SPINNING);
|
||||||
|
GST_DEBUG(GST_CAT_THREAD,"no sync(" GST_DEBUG_THREAD_FORMAT "): setting own thread's state to spinning\n",
|
||||||
|
GST_DEBUG_THREAD_ARGS(thread->pid));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
THR_DEBUG("telling thread to stop spinning\n");
|
||||||
|
g_mutex_lock(thread->lock);
|
||||||
|
gst_thread_signal_thread(thread,FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue