Commit 799b1670 authored by Mathieu Duponchelle's avatar Mathieu Duponchelle Committed by Edward Hervey

adaptivedemux: release the manifest lock ...

before broadcasting preroll.

The deadlock was as follows:

-> The subclass pushes a buffer on a newly-created stream in T1
-> We take the preroll lock in T1, to handle_preroll
-> The demuxer is stopped in T2, we take the MANIFEST_LOCK
-> T1 starts blocking because it received a reconfigure event
   and needs to take the MANIFEST_LOCK
-> T2 deadlocks because it now wants the preroll_lock.

https://bugzilla.gnome.org/show_bug.cgi?id=783255
parent 55a7fb85
......@@ -1974,9 +1974,11 @@ gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux, gboolean stop_updates)
g_mutex_unlock (&stream->fragment_download_lock);
}
GST_MANIFEST_UNLOCK (demux);
g_mutex_lock (&demux->priv->preroll_lock);
g_cond_broadcast (&demux->priv->preroll_cond);
g_mutex_unlock (&demux->priv->preroll_lock);
GST_MANIFEST_LOCK (demux);
g_mutex_lock (&demux->priv->manifest_update_lock);
g_cond_broadcast (&demux->priv->manifest_cond);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment