mirror of
https://github.com/mpv-player/mpv
synced 2025-02-20 06:46:55 +00:00
stream.c: make reconnect checks more robust
Improve checks for when to try reconnecting to be more thorough and readable. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33809 b3059339-0415-0410-9bf9-f77b7e298cf2 Reindent, add empty lines. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33810 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
2e2f77e346
commit
a7b99687a7
@ -305,22 +305,29 @@ int stream_read_internal(stream_t *s, void *buf, int len)
|
||||
len= s->fill_buffer ? s->fill_buffer(s, buf, len) : 0;
|
||||
}
|
||||
if(len<=0){
|
||||
off_t pos = s->pos;
|
||||
// do not retry if this looks like proper eof
|
||||
if (s->eof || (s->end_pos && pos == s->end_pos))
|
||||
goto eof_out;
|
||||
// dvdnav has some horrible hacks to "suspend" reads,
|
||||
// we need to skip this code or seeks will hang.
|
||||
if (!s->eof && s->type != STREAMTYPE_DVDNAV) {
|
||||
// just in case this is an error e.g. due to network
|
||||
// timeout reset and retry
|
||||
// Seeking is used as a hack to make network streams
|
||||
// reopen the connection, ideally they would implement
|
||||
// e.g. a STREAM_CTRL_RECONNECT to do this
|
||||
off_t pos = s->pos;
|
||||
s->eof=1;
|
||||
stream_reset(s);
|
||||
stream_seek_internal(s, pos);
|
||||
// make sure EOF is set to ensure no endless loops
|
||||
s->eof=1;
|
||||
return stream_read_internal(s, buf, orig_len);
|
||||
}
|
||||
if (s->type == STREAMTYPE_DVDNAV)
|
||||
goto eof_out;
|
||||
|
||||
// just in case this is an error e.g. due to network
|
||||
// timeout reset and retry
|
||||
// Seeking is used as a hack to make network streams
|
||||
// reopen the connection, ideally they would implement
|
||||
// e.g. a STREAM_CTRL_RECONNECT to do this
|
||||
s->eof=1;
|
||||
stream_reset(s);
|
||||
if (stream_seek_internal(s, pos) >= 0 || s->pos != pos) // seek failed
|
||||
goto eof_out;
|
||||
// make sure EOF is set to ensure no endless loops
|
||||
s->eof=1;
|
||||
return stream_read_internal(s, buf, orig_len);
|
||||
|
||||
eof_out:
|
||||
s->eof=1;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user