summaryrefslogtreecommitdiff
path: root/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/gst/adaptivedemux/gstadaptivedemux.c')
-rw-r--r--gst-libs/gst/adaptivedemux/gstadaptivedemux.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
index 7b82653a2..0d7f4228f 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
@@ -283,7 +283,8 @@ static void gst_adaptive_demux_start_manifest_update_task (GstAdaptiveDemux *
static void gst_adaptive_demux_start_tasks (GstAdaptiveDemux * demux,
gboolean start_preroll_streams);
-static void gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux);
+static void gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux,
+ gboolean stop_updates);
static GstFlowReturn gst_adaptive_demux_combine_flows (GstAdaptiveDemux *
demux);
static void
@@ -561,13 +562,7 @@ gst_adaptive_demux_change_state (GstElement * element,
GST_MANIFEST_LOCK (demux);
demux->running = FALSE;
gst_adaptive_demux_reset (demux);
- gst_adaptive_demux_stop_manifest_update_task (demux);
GST_MANIFEST_UNLOCK (demux);
-
- /* demux->priv->updates_task value never changes, so it is safe to read it
- * outside critical section
- */
- gst_task_join (demux->priv->updates_task);
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
GST_MANIFEST_LOCK (demux);
@@ -775,7 +770,7 @@ gst_adaptive_demux_reset (GstAdaptiveDemux * demux)
old_streams = demux->priv->old_streams;
demux->priv->old_streams = NULL;
- gst_adaptive_demux_stop_tasks (demux);
+ gst_adaptive_demux_stop_tasks (demux, TRUE);
if (klass->reset)
klass->reset (demux);
@@ -1641,11 +1636,11 @@ gst_adaptive_demux_handle_seek_event (GstAdaptiveDemux * demux, GstPad * pad,
gst_adaptive_demux_push_src_event (demux, fevent);
GST_MANIFEST_LOCK (demux);
- gst_adaptive_demux_stop_tasks (demux);
+ gst_adaptive_demux_stop_tasks (demux, FALSE);
} else if ((rate > 0 && start_type != GST_SEEK_TYPE_NONE) ||
(rate < 0 && stop_type != GST_SEEK_TYPE_NONE)) {
- gst_adaptive_demux_stop_tasks (demux);
+ gst_adaptive_demux_stop_tasks (demux, FALSE);
}
GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
@@ -2048,12 +2043,14 @@ gst_adaptive_demux_start_manifest_update_task (GstAdaptiveDemux * demux)
* the demux element.
*/
static void
-gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux)
+gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux, gboolean stop_updates)
{
GList *iter;
GST_LOG_OBJECT (demux, "Stopping tasks");
+ if (stop_updates)
+ gst_adaptive_demux_stop_manifest_update_task (demux);
for (iter = demux->streams; iter; iter = g_list_next (iter)) {
GstAdaptiveDemuxStream *stream = iter->data;
@@ -2097,6 +2094,8 @@ gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux)
}
GST_MANIFEST_UNLOCK (demux);
+ if (stop_updates)
+ gst_task_join (demux->priv->updates_task);
GST_MANIFEST_LOCK (demux);