mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +00:00
Make sure we set the reaping flag when going to NULL before we signal the parent.
Original commit message from CVS: Make sure we set the reaping flag when going to NULL before we signal the parent.
This commit is contained in:
parent
07cf2da0c2
commit
e04e9d291e
1 changed files with 12 additions and 3 deletions
|
@ -366,11 +366,13 @@ gst_thread_change_state (GstElement *element)
|
|||
thread->thread_id = g_thread_create_full(gst_thread_main_loop,
|
||||
thread, STACK_SIZE, TRUE, TRUE, G_THREAD_PRIORITY_NORMAL,
|
||||
&error);
|
||||
|
||||
if (!thread->thread_id){
|
||||
GST_DEBUG (GST_CAT_THREAD, "g_thread_create_full failed");
|
||||
g_mutex_unlock (thread->lock);
|
||||
GST_DEBUG (GST_CAT_THREAD, "could not create thread \"%s\"",
|
||||
GST_ELEMENT_NAME (element));
|
||||
|
||||
return GST_STATE_FAILURE;
|
||||
}
|
||||
GST_DEBUG (GST_CAT_THREAD, "GThread created");
|
||||
|
@ -408,6 +410,11 @@ gst_thread_change_state (GstElement *element)
|
|||
g_cond_wait (thread->cond, thread->lock);
|
||||
THR_DEBUG ("got ack");
|
||||
g_mutex_unlock (thread->lock);
|
||||
|
||||
/* we're actually doing async notification, the state could
|
||||
* have changed already (eg. EOS) here. commented out as
|
||||
* it needs more thinking... */
|
||||
/* stateset = GST_STATE_ASYNC; */
|
||||
break;
|
||||
}
|
||||
case GST_STATE_PLAYING_TO_PAUSED:
|
||||
|
@ -496,6 +503,7 @@ gst_thread_change_state (GstElement *element)
|
|||
g_cond_wait (thread->cond, thread->lock);
|
||||
THR_DEBUG ("got ack");
|
||||
|
||||
|
||||
/* this block of code is very tricky
|
||||
* basically, we try to clean up the whole thread and
|
||||
* everything related to it in the right order without
|
||||
|
@ -618,15 +626,15 @@ gst_thread_main_loop (void *arg)
|
|||
|
||||
/* been signaled, we need to state transition now and signal back */
|
||||
gst_thread_update_state (thread);
|
||||
THR_DEBUG_MAIN ("done with state transition, "
|
||||
"signaling back to parent process");
|
||||
g_cond_signal (thread->cond);
|
||||
/* now we decide what to do next */
|
||||
if (GST_STATE (thread) == GST_STATE_NULL) {
|
||||
/* REAPING must be set, we can simply break this iteration */
|
||||
THR_DEBUG_MAIN ("set GST_THREAD_STATE_REAPING");
|
||||
GST_FLAG_SET (thread, GST_THREAD_STATE_REAPING);
|
||||
}
|
||||
THR_DEBUG_MAIN ("done with state transition, "
|
||||
"signaling back to parent process");
|
||||
g_cond_signal (thread->cond);
|
||||
continue;
|
||||
|
||||
case GST_STATE_PAUSED:
|
||||
|
@ -646,6 +654,7 @@ gst_thread_main_loop (void *arg)
|
|||
|
||||
/* been signaled, we need to state transition now and signal back */
|
||||
gst_thread_update_state (thread);
|
||||
|
||||
/* now we decide what to do next */
|
||||
if (GST_STATE (thread) != GST_STATE_PLAYING) {
|
||||
/* either READY or the state change failed for some reason */
|
||||
|
|
Loading…
Reference in a new issue