[Bug 797098] New: downloadbuffer: does not recover from failed seek

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Fri Sep 7 20:14:14 UTC 2018


https://bugzilla.gnome.org/show_bug.cgi?id=797098

            Bug ID: 797098
           Summary: downloadbuffer: does not recover from failed seek
    Classification: Platform
           Product: GStreamer
           Version: git master
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: don't know
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: aboya at igalia.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

This is some code from perform_seek_to_offset() from gstdownloadbuffer.c

  /* until we receive the FLUSH_STOP from this seek, we skip data */
  dlbuf->seeking = TRUE;
  dlbuf->write_pos = offset;
  dlbuf->filling = FALSE;
  GST_DOWNLOAD_BUFFER_MUTEX_UNLOCK (dlbuf);

  GST_DEBUG_OBJECT (dlbuf, "Seeking to %" G_GUINT64_FORMAT, offset);

  event =
      gst_event_new_seek (1.0, GST_FORMAT_BYTES,
      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, offset,
      GST_SEEK_TYPE_NONE, -1);

  res = gst_pad_push_event (dlbuf->sinkpad, event);
  GST_DOWNLOAD_BUFFER_MUTEX_LOCK (dlbuf);

  return res;

Problem is: what happens if the seek fails? `write_pos` has already been set to
the attempted seek position.

What I've seen happening next is that then downloadbuffer waits endlessly for
that data with the offset of the seek to arrive; which never happens because
gst_download_buffer_chain() has this check:

  /* while we didn't receive the newsegment, we're seeking and we skip data */
  if (dlbuf->seeking)
    goto out_seeking;

(and downloadbuffer falsely believes the seek went through)

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list