mirror of https://github.com/mpv-player/mpv
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:
parent
f21d2dcc7e
commit
827df51f1d
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue