From 4e28b4bc9ed8e29daf3570596cc7a4c5325e8039 Mon Sep 17 00:00:00 2001
From: reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Date: Sat, 23 Jan 2010 12:13:28 +0000
Subject: [PATCH] Change code to allow playing a stream even if enabling the
 cache failed while still handling it when the user aborts the cache fill.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30402 b3059339-0415-0410-9bf9-f77b7e298cf2
---
 mplayer.c       | 6 ++++--
 stream/cache2.c | 7 +++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/mplayer.c b/mplayer.c
index da0ebb5671..1eacaaf085 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3281,10 +3281,12 @@ if(mpctx->stream->type==STREAMTYPE_DVDNAV){
 // CACHE2: initial prefill: 20%  later: 5%  (should be set by -cacheopts)
 goto_enable_cache:
 if(stream_cache_size>0){
+  int res;
   current_module="enable_cache";
-  if(!stream_enable_cache(mpctx->stream,stream_cache_size*1024,
+  res = stream_enable_cache(mpctx->stream,stream_cache_size*1024,
                           stream_cache_size*1024*(stream_cache_min_percent / 100.0),
-                          stream_cache_size*1024*(stream_cache_seek_min_percent / 100.0)))
+                          stream_cache_size*1024*(stream_cache_seek_min_percent / 100.0));
+  if(res == 0)
     if((mpctx->eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file;
 }
 
diff --git a/stream/cache2.c b/stream/cache2.c
index 72a906b9a5..64f685e82c 100644
--- a/stream/cache2.c
+++ b/stream/cache2.c
@@ -313,6 +313,9 @@ static void exit_sighandler(int x){
   exit(0);
 }
 
+/**
+ * \return 1 on success, 0 if the function was interrupted and -1 on error
+ */
 int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
   int ss = stream->sector_size ? stream->sector_size : STREAM_BUFFER_SIZE;
   cache_vars_t* s;
@@ -323,7 +326,7 @@ int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
   }
 
   s=cache_init(size,ss);
-  if(s == NULL) return 0;
+  if(s == NULL) return -1;
   stream->cache_data=s;
   s->stream=stream; // callback
   s->seek_limit=seek_limit;
@@ -362,7 +365,7 @@ int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
     if (!stream->cache_pid) {
         mp_msg(MSGT_CACHE, MSGL_ERR,
                "Starting cache process/thread failed: %s.\n", strerror(errno));
-        return 0;
+        return -1;
     }
     // wait until cache is filled at least prefill_init %
     mp_msg(MSGT_CACHE,MSGL_V,"CACHE_PRE_INIT: %"PRId64" [%"PRId64"] %"PRId64"  pre:%d  eof:%d  \n",