souphttpsrc: reset read_position when reading fails

souphttpsrc maintains two variables for the position:
 * 'request_position' is where we want to be
 * 'read_position' is where we are
During Normal operations both are updated in sync when data arrives. A seek
changes 'request_position' but not 'read_position'.
When the two positions get out of sync, then a new request is send and the
'Range' header is adjusted to the current 'request_position'.

Without this patch, if reading fails, then the source is destroyed. This
triggers a new request, but the range remains unchanged. As a result, the
old range is used and old data will be read.

Changing the 'read_position' to -1 makes it explicitly different from
'request_position' and as a result the 'Range' header is updated correctly.

https://bugzilla.gnome.org/show_bug.cgi?id=773509
This commit is contained in:
Michael Olbrich 2016-10-26 08:51:40 +02:00 committed by Sebastian Dröge
parent f6b2fc10ff
commit 8666b7d871

View file

@ -1747,6 +1747,8 @@ done:
gst_event_unref (http_headers_event); gst_event_unref (http_headers_event);
g_mutex_lock (&src->mutex); g_mutex_lock (&src->mutex);
/* Make sure the Range header is updated with the current position */
src->read_position = -1;
gst_soup_http_src_destroy_input_stream (src); gst_soup_http_src_destroy_input_stream (src);
g_mutex_unlock (&src->mutex); g_mutex_unlock (&src->mutex);
if (ret == GST_FLOW_CUSTOM_ERROR) if (ret == GST_FLOW_CUSTOM_ERROR)