streamcombiner: Fix locking
authorSebastian Dröge <slomo@circular-chaos.org>
Mon, 22 Jul 2013 06:08:27 +0000 (08:08 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Mon, 22 Jul 2013 06:08:27 +0000 (08:08 +0200)
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.

gst/encoding/gststreamcombiner.c

index 518b377..e41914f 100644 (file)
@@ -138,8 +138,7 @@ gst_stream_combiner_sink_event (GstPad * pad, GstObject * parent,
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_EOS:
-      GST_PAD_STREAM_LOCK (pad);
-
+      STREAMS_LOCK (stream_combiner);
       combiner_pad->is_eos = TRUE;
       if (!_all_sink_pads_eos (stream_combiner)) {
         gst_event_unref (event);
@@ -147,8 +146,7 @@ gst_stream_combiner_sink_event (GstPad * pad, GstObject * parent,
       } else {
         GST_DEBUG_OBJECT (stream_combiner, "All sink pads eos, pushing eos");
       }
-
-      GST_PAD_STREAM_UNLOCK (pad);
+      STREAMS_UNLOCK (stream_combiner);
       break;
     default:
       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 */
   /* OTHER : if selected pad forward */
   if (event)
-    return gst_pad_push_event (stream_combiner->srcpad, event);
+    return gst_pad_event_default (pad, parent, event);
   return FALSE;
 }