jitterbuffer: fix race in flush-start/flush-stop
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 4 Oct 2013 10:11:56 +0000 (12:11 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Fri, 4 Oct 2013 10:35:18 +0000 (12:35 +0200)
When flush-stop arrives before we process the result of the _push() in the
loop function, we might pause even though we are not flushing anymore. Fix this
race by waiting for the srcpad loop function to completely pause after doing the
flush-start.

gst/rtpmanager/gstrtpjitterbuffer.c

index 60d384d..5539244 100644 (file)
@@ -1337,6 +1337,8 @@ gst_rtp_jitter_buffer_sink_event (GstPad * pad, GstObject * parent,
     case GST_EVENT_FLUSH_START:
       ret = gst_pad_push_event (priv->srcpad, event);
       gst_rtp_jitter_buffer_flush_start (jitterbuffer);
+      /* wait for the loop to go into PAUSED */
+      gst_pad_pause_task (priv->srcpad);
       break;
     case GST_EVENT_FLUSH_STOP:
       ret = gst_pad_push_event (priv->srcpad, event);