Commit ee1be923 authored by Vincent Penquerc'h's avatar Vincent Penquerc'h Committed by Wim Taymans
Browse files

matroskademux: only unlock pad when it was locked

This fixes the mutex being unlocked too much and ending up allowing
other threads when they should not.

https://bugzilla.gnome.org/show_bug.cgi?id=671776
parent 38372eb1
......@@ -1910,6 +1910,7 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
GstMatroskaTrackContext *track = NULL;
GstSegment seeksegment = { 0, };
gboolean update = TRUE;
gboolean pad_locked = FALSE;
if (pad)
track = gst_pad_get_element_private (pad);
......@@ -2011,6 +2012,7 @@ next:
* forever. */
GST_DEBUG_OBJECT (demux, "Waiting for streaming to stop");
GST_PAD_STREAM_LOCK (demux->common.sinkpad);
pad_locked = TRUE;
/* pull mode without index can do some scanning */
if (!demux->streaming && !entry) {
......@@ -2093,13 +2095,17 @@ exit:
(GstTaskFunction) gst_matroska_demux_loop, demux->common.sinkpad);
/* streaming can continue now */
GST_PAD_STREAM_UNLOCK (demux->common.sinkpad);
if (pad_locked) {
GST_PAD_STREAM_UNLOCK (demux->common.sinkpad);
}
return TRUE;
seek_error:
{
GST_PAD_STREAM_UNLOCK (demux->common.sinkpad);
if (pad_locked) {
GST_PAD_STREAM_UNLOCK (demux->common.sinkpad);
}
GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL), ("Got a seek error"));
return FALSE;
}
......
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