mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
hlsdemux: Fix another race condition by holding the mutex that the condition variable uses
Conflicts: gst/hls/gsthlsdemux.c
This commit is contained in:
parent
e3f00d6252
commit
443703a08e
1 changed files with 10 additions and 0 deletions
|
@ -140,9 +140,11 @@ gst_hls_demux_dispose (GObject * obj)
|
||||||
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
|
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
|
||||||
GST_DEBUG_OBJECT (demux, "Leaving updates task");
|
GST_DEBUG_OBJECT (demux, "Leaving updates task");
|
||||||
gst_task_stop (demux->updates_task);
|
gst_task_stop (demux->updates_task);
|
||||||
|
g_mutex_lock (&demux->updates_timed_lock);
|
||||||
GST_TASK_SIGNAL (demux->updates_task);
|
GST_TASK_SIGNAL (demux->updates_task);
|
||||||
g_rec_mutex_lock (&demux->updates_lock);
|
g_rec_mutex_lock (&demux->updates_lock);
|
||||||
g_rec_mutex_unlock (&demux->updates_lock);
|
g_rec_mutex_unlock (&demux->updates_lock);
|
||||||
|
g_mutex_unlock (&demux->updates_timed_lock);
|
||||||
gst_task_join (demux->updates_task);
|
gst_task_join (demux->updates_task);
|
||||||
}
|
}
|
||||||
gst_object_unref (demux->updates_task);
|
gst_object_unref (demux->updates_task);
|
||||||
|
@ -322,7 +324,9 @@ gst_hls_demux_change_state (GstElement * element, GstStateChange transition)
|
||||||
switch (transition) {
|
switch (transition) {
|
||||||
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
||||||
gst_task_stop (demux->updates_task);
|
gst_task_stop (demux->updates_task);
|
||||||
|
g_mutex_lock (&demux->updates_timed_lock);
|
||||||
GST_TASK_SIGNAL (demux->updates_task);
|
GST_TASK_SIGNAL (demux->updates_task);
|
||||||
|
g_mutex_unlock (&demux->updates_timed_lock);
|
||||||
g_rec_mutex_lock (&demux->updates_lock);
|
g_rec_mutex_lock (&demux->updates_lock);
|
||||||
g_rec_mutex_unlock (&demux->updates_lock);
|
g_rec_mutex_unlock (&demux->updates_lock);
|
||||||
break;
|
break;
|
||||||
|
@ -406,7 +410,9 @@ gst_hls_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
|
||||||
gst_task_pause (demux->stream_task);
|
gst_task_pause (demux->stream_task);
|
||||||
gst_uri_downloader_cancel (demux->downloader);
|
gst_uri_downloader_cancel (demux->downloader);
|
||||||
gst_task_stop (demux->updates_task);
|
gst_task_stop (demux->updates_task);
|
||||||
|
g_mutex_lock (&demux->updates_timed_lock);
|
||||||
GST_TASK_SIGNAL (demux->updates_task);
|
GST_TASK_SIGNAL (demux->updates_task);
|
||||||
|
g_mutex_unlock (&demux->updates_timed_lock);
|
||||||
g_rec_mutex_lock (&demux->updates_lock);
|
g_rec_mutex_lock (&demux->updates_lock);
|
||||||
g_rec_mutex_unlock (&demux->updates_lock);
|
g_rec_mutex_unlock (&demux->updates_lock);
|
||||||
gst_task_pause (demux->stream_task);
|
gst_task_pause (demux->stream_task);
|
||||||
|
@ -603,7 +609,9 @@ gst_hls_demux_pause_tasks (GstHLSDemux * demux)
|
||||||
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
|
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
|
||||||
demux->stop_stream_task = TRUE;
|
demux->stop_stream_task = TRUE;
|
||||||
gst_task_pause (demux->updates_task);
|
gst_task_pause (demux->updates_task);
|
||||||
|
g_mutex_lock (&demux->updates_timed_lock);
|
||||||
GST_TASK_SIGNAL (demux->updates_task);
|
GST_TASK_SIGNAL (demux->updates_task);
|
||||||
|
g_mutex_unlock (&demux->updates_timed_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) {
|
if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) {
|
||||||
|
@ -619,7 +627,9 @@ gst_hls_demux_stop (GstHLSDemux * demux)
|
||||||
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
|
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
|
||||||
demux->stop_stream_task = TRUE;
|
demux->stop_stream_task = TRUE;
|
||||||
gst_task_stop (demux->updates_task);
|
gst_task_stop (demux->updates_task);
|
||||||
|
g_mutex_lock (&demux->updates_timed_lock);
|
||||||
GST_TASK_SIGNAL (demux->updates_task);
|
GST_TASK_SIGNAL (demux->updates_task);
|
||||||
|
g_mutex_unlock (&demux->updates_timed_lock);
|
||||||
g_rec_mutex_lock (&demux->updates_lock);
|
g_rec_mutex_lock (&demux->updates_lock);
|
||||||
g_rec_mutex_unlock (&demux->updates_lock);
|
g_rec_mutex_unlock (&demux->updates_lock);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue