mirror of
https://github.com/mpv-player/mpv
synced 2025-01-01 04:12:25 +00:00
stream_file: use fstat() instead of lseek() to determine file size
It appears using lseek() to seek to the end and back to determine file size is inefficient in some cases. With CIFS, this restores the performance regression that happened when the stream cache was removed (which called read() from a thread). This is probably faster than the old code too, because it's the seeking that was slowing down CIFS. According to the user who tested this, the size caching does not help with fstat() (although it did with the old method). Fixes: #7408, #7152
This commit is contained in:
parent
249bb091d4
commit
20eead1813
@ -77,9 +77,14 @@ static int64_t get_size(stream_t *s)
|
||||
{
|
||||
struct priv *p = s->priv;
|
||||
if (p->cached_size == -2) {
|
||||
off_t size = lseek(p->fd, 0, SEEK_END);
|
||||
lseek(p->fd, s->pos, SEEK_SET);
|
||||
p->cached_size = size < 0 ? -1 : size;
|
||||
int64_t size = -1;
|
||||
struct stat st;
|
||||
if (fstat(p->fd, &st) == 0) {
|
||||
if (st.st_size <= 0 && !s->seekable)
|
||||
st.st_size = -1;
|
||||
size = st.st_size < 0 ? -1 : st.st_size;
|
||||
}
|
||||
p->cached_size = size;
|
||||
}
|
||||
return p->cached_size;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user