Commit eb09829a authored by Seungha Yang's avatar Seungha Yang Committed by Tim-Philipp Müller

matroskademux: don't hold object lock whilst pushing out headers

matroskademux would take the GST_OBJECT_LOCK in
- gst_matroska_demux_push_codec_data_all()
- gst_matroska_demux_query()

Some parse element such as FLAC checks upstream seekability, and
there is some use cases that matroska-demux is linked to a parse element
(e.g.,FLAC format) without intermediate elements (e.g., queue).
In this case, matroska-demux never returns from _push_codec_data_all()
because the parser can return only after it receives the response to
the upstream query, but that's not going to happen because it's
deadlocked.

Elements must not hold the object lock whilst pushing out events
or data.

https://bugzilla.gnome.org/show_bug.cgi?id=766645
parent e2b21850
......@@ -2752,8 +2752,6 @@ gst_matroska_demux_push_codec_data_all (GstMatroskaDemux * demux)
{
gint stream_nr;
GST_OBJECT_LOCK (demux);
g_assert (demux->common.num_streams == demux->common.src->len);
for (stream_nr = 0; stream_nr < demux->common.src->len; stream_nr++) {
GstMatroskaTrackContext *stream;
......@@ -2778,7 +2776,6 @@ gst_matroska_demux_push_codec_data_all (GstMatroskaDemux * demux)
}
}
GST_OBJECT_UNLOCK (demux);
}
static GstFlowReturn
......
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