1
0
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:
reimar 2011-07-04 19:21:59 +00:00 committed by Uoti Urpala
parent 2e2f77e346
commit a7b99687a7

View File

@ -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;
}