[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