[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