summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-01-23 12:27:13 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-01-23 12:27:13 +0000
commit570f1f5dec2f92f46a9628df2ff9b0f5620532a8 (patch)
treea56fda7a6793f93fdbcbe2cf9b45b41cf3c2cf31 /stream
parent73dea88956982bde9257946545babc9dedc52bda (diff)
downloadmpv-570f1f5dec2f92f46a9628df2ff9b0f5620532a8.tar.bz2
mpv-570f1f5dec2f92f46a9628df2ff9b0f5620532a8.tar.xz
Always call cache_uninit to immediately free everything cache-related if we
fail to enable the cache. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30404 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream')
-rw-r--r--stream/cache2.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/stream/cache2.c b/stream/cache2.c
index 64f685e82c..fcef566762 100644
--- a/stream/cache2.c
+++ b/stream/cache2.c
@@ -318,6 +318,7 @@ static void exit_sighandler(int x){
*/
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;
+ int res = -1;
cache_vars_t* s;
if (stream->flags & STREAM_NON_CACHEABLE) {
@@ -365,7 +366,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 -1;
+ goto err_out;
}
// 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",
@@ -376,11 +377,17 @@ int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
(int64_t)s->max_filepos-s->read_filepos
);
if(s->eof) break; // file is smaller than prefill size
- if(stream_check_interrupt(PREFILL_SLEEP_TIME))
- return 0;
+ if(stream_check_interrupt(PREFILL_SLEEP_TIME)) {
+ res = 0;
+ goto err_out;
+ }
}
mp_msg(MSGT_CACHE,MSGL_STATUS,"\n");
return 1; // parent exits
+
+err_out:
+ cache_uninit(stream);
+ return res;
}
#if defined(__MINGW32__) || defined(PTHREAD_CACHE) || defined(__OS2__)