[MPlayer-cvslog] r30773 - trunk/stream/cache2.c
reimar
subversion at mplayerhq.hu
Sat Feb 27 22:02:44 CET 2010
Author: reimar
Date: Sat Feb 27 22:02:44 2010
New Revision: 30773
Log:
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).
Modified:
trunk/stream/cache2.c
Modified: trunk/stream/cache2.c
==============================================================================
--- trunk/stream/cache2.c Sat Feb 27 22:02:14 2010 (r30772)
+++ trunk/stream/cache2.c Sat Feb 27 22:02:44 2010 (r30773)
@@ -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_v
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_v
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);
More information about the MPlayer-cvslog
mailing list