path: root/stream
diff options
authorwm4 <wm4@nowhere>2014-04-09 19:06:21 +0200
committerwm4 <wm4@nowhere>2014-04-09 19:06:21 +0200
commita967152498aa0302d83fe5e70509f7210b123deb (patch)
tree2cb6e52366c7b3c3c13b1696a81eabdfdd3454e5 /stream
parent80392efaeadf968f233b4bfad87cd30ce635b1dc (diff)
cache: adjust stream position if necessary
Until now, this could never happen, because new data was simply always appended to the end of the cache. But for making stream cache resizing easier, doing it this way seems advantageous. It also makes it harder to make the internal state inconsistent. (Before this change it could happen that cache and stream position went out of sync if the read position was adjusted "inappropriately".)
Diffstat (limited to 'stream')
1 files changed, 6 insertions, 1 deletions
diff --git a/stream/cache.c b/stream/cache.c
index bcb5bea086..c992764522 100644
--- a/stream/cache.c
+++ b/stream/cache.c
@@ -252,10 +252,15 @@ static bool cache_fill(struct priv *s)
"cached range: %"PRId64"-%"PRId64".\n", read,
s->min_filepos, s->max_filepos);
- stream_seek(s->stream, read);
+ if (stream_tell(s->stream) != s->max_filepos) {
+ MP_VERBOSE(s, "Seeking underlying stream: %"PRId64" -> %"PRId64"\n",
+ stream_tell(s->stream), s->max_filepos);
+ stream_seek(s->stream, s->max_filepos);
+ }
// number of buffer bytes which should be preserved in backwards direction
int64_t back = mp_clipi64(read - s->min_filepos, 0, s->back_size);