From d4892859d4ce62e6dac6bee68653469859f493f9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 4 Oct 2013 12:11:56 +0200 Subject: [PATCH] jitterbuffer: fix race in flush-start/flush-stop 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index 60d384d800..553924415d 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -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);