From 570f1f5dec2f92f46a9628df2ff9b0f5620532a8 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 23 Jan 2010 12:27:13 +0000 Subject: 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 --- stream/cache2.c | 13 ++++++++++--- 1 file 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__) -- cgit v1.2.3