rtspsrc: Fix race saving seek event seqnum.
authorDoug Nazar <nazard@nazar.ca>
Mon, 19 Apr 2021 05:29:33 +0000 (01:29 -0400)
committerEdward Hervey <bilboed@bilboed.com>
Tue, 20 Apr 2021 06:03:22 +0000 (06:03 +0000)
We need to save the seek seqnum before the flush stop event
since that will start the basesrc task which may send the segment
event before we're ready.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/954>

gst/rtsp/gstrtspsrc.c

index 0430a46..a54a457 100644 (file)
@@ -2875,6 +2875,11 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
   /* PLAY will add the range header now. */
   src->need_range = TRUE;
 
+  /* If an accurate seek was requested, we want to clip the segment we
+   * output in ONVIF mode to the requested bounds */
+  src->clip_out_segment = ! !(flags & GST_SEEK_FLAG_ACCURATE);
+  src->seek_seqnum = gst_event_get_seqnum (event);
+
   /* prepare for streaming again */
   if (flush) {
     /* if we started flush, we stop now */
@@ -2923,11 +2928,6 @@ gst_rtspsrc_perform_seek (GstRTSPSrc * src, GstEvent * event)
       seek_style = "Next";
   }
 
-  /* If an accurate seek was requested, we want to clip the segment we
-   * output in ONVIF mode to the requested bounds */
-  src->clip_out_segment = ! !(flags & GST_SEEK_FLAG_ACCURATE);
-  src->seek_seqnum = gst_event_get_seqnum (event);
-
   if (playing)
     gst_rtspsrc_play (src, &seeksegment, FALSE, seek_style);