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:
Wim Taymans 2001-07-31 20:57:58 +00:00
parent 74d5b03f03
commit 3526156fe7

View file

@ -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;