Threaded cache fixes: do not free the stream_t struct twice on windows

and make sure the cache thread quits also for streams without a control
function (e.g. http).


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30773 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2010-02-27 21:02:44 +00:00
parent f21d2dcc7e
commit 827df51f1d
1 changed files with 6 additions and 8 deletions

View File

@ -222,14 +222,14 @@ static int cache_fill(cache_vars_t *s)
}
static int cache_execute_control(cache_vars_t *s) {
int res = 1;
static unsigned last;
if (!s->stream->control) {
int quit = s->control == -2;
if (quit || !s->stream->control) {
s->stream_time_length = 0;
s->control_new_pos = 0;
s->control_res = STREAM_UNSUPPORTED;
s->control = -1;
return res;
return !quit;
}
if (GetTimerMS() - last > 99) {
double len;
@ -239,7 +239,7 @@ static int cache_execute_control(cache_vars_t *s) {
s->stream_time_length = 0;
last = GetTimerMS();
}
if (s->control == -1) return res;
if (s->control == -1) return 1;
switch (s->control) {
case STREAM_CTRL_GET_CURRENT_TIME:
case STREAM_CTRL_SEEK_TO_TIME:
@ -254,15 +254,13 @@ static int cache_execute_control(cache_vars_t *s) {
case STREAM_CTRL_SET_ANGLE:
s->control_res = s->stream->control(s->stream, s->control, &s->control_uint_arg);
break;
case -2:
res = 0;
default:
s->control_res = STREAM_UNSUPPORTED;
break;
}
s->control_new_pos = s->stream->pos;
s->control = -1;
return res;
return 1;
}
static cache_vars_t* cache_init(int size,int sector){
@ -314,9 +312,9 @@ void cache_uninit(stream_t *s) {
}
if(!c) return;
#if defined(__MINGW32__) || defined(PTHREAD_CACHE) || defined(__OS2__)
free(c->stream);
free(c->buffer);
c->buffer = NULL;
c->stream = NULL;
free(s->cache_data);
#else
shmem_free(c->buffer,c->buffer_size);