mssdemux: Do not block on reset.

We need to cancel the downloader for each stream before joining the main download task, otherwise
the download task will block until all the stream tasks finish.
This commit is contained in:
Andre Moreira Magalhaes (andrunko) 2013-02-04 02:20:51 -02:00 committed by Thiago Santos
parent 8ab3d09f81
commit 12e9432847

View file

@ -238,8 +238,8 @@ gst_mss_demux_stream_free (GstMssDemuxStream * stream)
if (GST_TASK_STATE (stream->download_task) != GST_TASK_STOPPED) {
GST_DEBUG_OBJECT (stream->parent, "Leaving streaming task %s:%s",
GST_DEBUG_PAD_NAME (stream->pad));
gst_task_stop (stream->download_task);
gst_uri_downloader_cancel (stream->downloader);
gst_task_stop (stream->download_task);
g_static_rec_mutex_lock (&stream->download_lock);
g_static_rec_mutex_unlock (&stream->download_lock);
GST_LOG_OBJECT (stream->parent, "Waiting for task to finish");
@ -277,6 +277,14 @@ gst_mss_demux_reset (GstMssDemux * mssdemux)
{
GSList *iter;
for (iter = mssdemux->streams; iter; iter = g_slist_next (iter)) {
GstMssDemuxStream *stream = iter->data;
if (stream->downloader)
gst_uri_downloader_cancel (stream->downloader);
gst_data_queue_set_flushing (stream->dataqueue, TRUE);
}
if (GST_TASK_STATE (mssdemux->stream_task) != GST_TASK_STOPPED) {
gst_task_stop (mssdemux->stream_task);
g_static_rec_mutex_lock (&mssdemux->stream_lock);
@ -304,8 +312,9 @@ gst_mss_demux_reset (GstMssDemux * mssdemux)
mssdemux->n_videos = mssdemux->n_audios = 0;
g_free (mssdemux->base_url);
g_free (mssdemux->manifest_uri);
mssdemux->base_url = NULL;
g_free (mssdemux->manifest_uri);
mssdemux->manifest_uri = NULL;
}
static void
@ -313,6 +322,8 @@ gst_mss_demux_dispose (GObject * object)
{
GstMssDemux *mssdemux = GST_MSS_DEMUX_CAST (object);
gst_mss_demux_reset (mssdemux);
if (mssdemux->stream_task) {
gst_object_unref (mssdemux->stream_task);
g_static_rec_mutex_free (&mssdemux->stream_lock);
@ -503,6 +514,7 @@ gst_mss_demux_restart_tasks (GstMssDemux * mssdemux)
GSList *iter;
for (iter = mssdemux->streams; iter; iter = g_slist_next (iter)) {
GstMssDemuxStream *stream = iter->data;
gst_uri_downloader_reset (stream->downloader);
g_static_rec_mutex_unlock (&stream->download_lock);
}
g_static_rec_mutex_unlock (&mssdemux->stream_lock);