[MPlayer-cvslog] r33809 - trunk/stream/stream.c
reimar
subversion at mplayerhq.hu
Mon Jul 4 21:21:59 CEST 2011
Author: reimar
Date: Mon Jul 4 21:21:59 2011
New Revision: 33809
Log:
Improve checks for when to try reconnecting to be more thorough and readable.
Modified:
trunk/stream/stream.c
Modified: trunk/stream/stream.c
==============================================================================
--- trunk/stream/stream.c Mon Jul 4 21:14:06 2011 (r33808)
+++ trunk/stream/stream.c Mon Jul 4 21:21:59 2011 (r33809)
@@ -308,22 +308,27 @@ int stream_read_internal(stream_t *s, vo
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) {
+ 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
- off_t pos = s->pos;
s->eof=1;
stream_reset(s);
- stream_seek_internal(s, pos);
+ 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;
}
More information about the MPlayer-cvslog
mailing list