summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-10-15 10:38:16 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2012-10-15 10:39:52 +0200
commitb335f5a68e111611aa91af79317a7569310599f4 (patch)
treeda5401c54900e51de49c135e7c5556148f3b799c /gst
parent443703a08ea1d0379c149f4dbfdbf97d80ca7a44 (diff)
downloadgstreamer-plugins-bad-b335f5a68e111611aa91af79317a7569310599f4.tar.gz
hlsdemux: Only lock the mutex when it's not locked already
Conflicts: gst/hls/gsthlsdemux.c
Diffstat (limited to 'gst')
-rw-r--r--gst/hls/gsthlsdemux.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c
index 2ebf84b14..da1192f37 100644
--- a/gst/hls/gsthlsdemux.c
+++ b/gst/hls/gsthlsdemux.c
@@ -102,7 +102,7 @@ static gboolean gst_hls_demux_src_query (GstPad * pad, GstObject * parent,
static void gst_hls_demux_stream_loop (GstHLSDemux * demux);
static void gst_hls_demux_updates_loop (GstHLSDemux * demux);
static void gst_hls_demux_stop (GstHLSDemux * demux);
-static void gst_hls_demux_pause_tasks (GstHLSDemux * demux);
+static void gst_hls_demux_pause_tasks (GstHLSDemux * demux, gboolean caching);
static gboolean gst_hls_demux_cache_fragments (GstHLSDemux * demux);
static gboolean gst_hls_demux_schedule (GstHLSDemux * demux);
static gboolean gst_hls_demux_switch_playlist (GstHLSDemux * demux);
@@ -602,16 +602,18 @@ gst_hls_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
}
static void
-gst_hls_demux_pause_tasks (GstHLSDemux * demux)
+gst_hls_demux_pause_tasks (GstHLSDemux * demux, gboolean caching)
{
gst_uri_downloader_cancel (demux->downloader);
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
demux->stop_stream_task = TRUE;
gst_task_pause (demux->updates_task);
- g_mutex_lock (&demux->updates_timed_lock);
+ if (!caching)
+ g_mutex_lock (&demux->updates_timed_lock);
GST_TASK_SIGNAL (demux->updates_task);
- g_mutex_unlock (&demux->updates_timed_lock);
+ if (!caching)
+ g_mutex_unlock (&demux->updates_timed_lock);
}
if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) {
@@ -752,7 +754,7 @@ end_of_playlist:
{
GST_DEBUG_OBJECT (demux, "Reached end of playlist, sending EOS");
gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
- gst_hls_demux_pause_tasks (demux);
+ gst_hls_demux_pause_tasks (demux, FALSE);
return;
}
@@ -762,7 +764,7 @@ cache_error:
if (!demux->cancelled) {
GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND,
("Could not cache the first fragments"), (NULL));
- gst_hls_demux_pause_tasks (demux);
+ gst_hls_demux_pause_tasks (demux, FALSE);
}
return;
}
@@ -777,7 +779,7 @@ error_pushing:
GST_DEBUG_OBJECT (demux, "stream stopped, reason %s",
gst_flow_get_name (ret));
}
- gst_hls_demux_pause_tasks (demux);
+ gst_hls_demux_pause_tasks (demux, FALSE);
return;
}
@@ -915,7 +917,7 @@ quit:
error:
{
GST_DEBUG_OBJECT (demux, "Stopped updates task because of error");
- gst_hls_demux_pause_tasks (demux);
+ gst_hls_demux_pause_tasks (demux, TRUE);
g_mutex_unlock (&demux->updates_timed_lock);
}
}