summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeungha Yang <sh.yang@lge.com>2016-05-19 15:36:57 +0900
committerTim-Philipp Müller <tim@centricular.com>2016-05-19 22:01:53 +0100
commiteb09829a1c1987373ae433daca6420ea6c0fb908 (patch)
tree5f9ecb622645bb8cd8e496353a6722dbadc7858c
parente2b21850295c2db661bff8b42627d00984c7aab2 (diff)
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
-rw-r--r--gst/matroska/matroska-demux.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index c5fee777f..70f09e876 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -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