[MPlayer-cvslog] r31251 - trunk/stream/cache2.c
reimar
subversion at mplayerhq.hu
Fri May 28 19:26:31 CEST 2010
Author: reimar
Date: Fri May 28 19:26:31 2010
New Revision: 31251
Log:
Improve handling of cache process/thread hanging/being killed.
In particular allow a single STRG+C to quite MPlayer.
Modified:
trunk/stream/cache2.c
Modified: trunk/stream/cache2.c
==============================================================================
--- trunk/stream/cache2.c Fri May 28 18:57:16 2010 (r31250)
+++ trunk/stream/cache2.c Fri May 28 19:26:31 2010 (r31251)
@@ -116,6 +116,8 @@ static void cache_stats(cache_vars_t *s)
static int cache_read(cache_vars_t *s, unsigned char *buf, int size)
{
int total=0;
+ int sleep_count = 0;
+ int last_max = s->max_filepos;
while(size>0){
int pos,newb,len;
@@ -124,10 +126,21 @@ static int cache_read(cache_vars_t *s, u
if(s->read_filepos>=s->max_filepos || s->read_filepos<s->min_filepos){
// eof?
if(s->eof) break;
+ if (s->max_filepos == last_max) {
+ if (sleep_count++ == 5)
+ mp_msg(MSGT_CACHE, MSGL_WARN, "Cache not filling!\n");
+ } else {
+ last_max = s->max_filepos;
+ sleep_count = 0;
+ }
// waiting for buffer fill...
- usec_sleep(READ_USLEEP_TIME); // 10ms
+ if (stream_check_interrupt(READ_USLEEP_TIME)) {
+ s->eof = 1;
+ break;
+ }
continue; // try again...
}
+ sleep_count = 0;
newb=s->max_filepos-s->read_filepos; // new bytes in the buffer
if(newb<min_fill) min_fill=newb; // statistics...
@@ -534,6 +547,7 @@ int cache_stream_seek_long(stream_t *str
}
int cache_do_control(stream_t *stream, int cmd, void *arg) {
+ int sleep_count = 0;
cache_vars_t* s = stream->cache_data;
switch (cmd) {
case STREAM_CTRL_SEEK_TO_TIME:
@@ -562,8 +576,14 @@ int cache_do_control(stream_t *stream, i
return STREAM_UNSUPPORTED;
}
cache_wakeup(stream);
- while (s->control != -1)
- usec_sleep(CONTROL_SLEEP_TIME);
+ while (s->control != -1) {
+ if (sleep_count++ == 1000)
+ mp_msg(MSGT_CACHE, MSGL_WARN, "Cache no responding!\n");
+ if (stream_check_interrupt(CONTROL_SLEEP_TIME)) {
+ s->eof = 1;
+ return STREAM_UNSUPPORTED;
+ }
+ }
switch (cmd) {
case STREAM_CTRL_GET_TIME_LENGTH:
case STREAM_CTRL_GET_CURRENT_TIME:
More information about the MPlayer-cvslog
mailing list