streamcombiner: Fix locking

We have to hold the streams-lock when iterating over all pads,
also the stream-lock of the pad is already locked when we receive
EOS.

Call gst_pad_event_default() for the correct default handling of
events.
This commit is contained in:
Sebastian Dröge 2013-07-22 08:08:27 +02:00
parent 2f8b0f1e34
commit 9bd140d3b7

View file

@ -138,8 +138,7 @@ gst_stream_combiner_sink_event (GstPad * pad, GstObject * parent,
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS: case GST_EVENT_EOS:
GST_PAD_STREAM_LOCK (pad); STREAMS_LOCK (stream_combiner);
combiner_pad->is_eos = TRUE; combiner_pad->is_eos = TRUE;
if (!_all_sink_pads_eos (stream_combiner)) { if (!_all_sink_pads_eos (stream_combiner)) {
gst_event_unref (event); gst_event_unref (event);
@ -147,8 +146,7 @@ gst_stream_combiner_sink_event (GstPad * pad, GstObject * parent,
} else { } else {
GST_DEBUG_OBJECT (stream_combiner, "All sink pads eos, pushing eos"); GST_DEBUG_OBJECT (stream_combiner, "All sink pads eos, pushing eos");
} }
STREAMS_UNLOCK (stream_combiner);
GST_PAD_STREAM_UNLOCK (pad);
break; break;
default: default:
break; break;
@ -159,7 +157,7 @@ gst_stream_combiner_sink_event (GstPad * pad, GstObject * parent,
/* FLUSH_STOP : lock, unmark as flushing, unlock, if was flushing forward */ /* FLUSH_STOP : lock, unmark as flushing, unlock, if was flushing forward */
/* OTHER : if selected pad forward */ /* OTHER : if selected pad forward */
if (event) if (event)
return gst_pad_push_event (stream_combiner->srcpad, event); return gst_pad_event_default (pad, parent, event);
return FALSE; return FALSE;
} }