in case alsa lies to use don't spin forever

This commit is contained in:
Lennart Poettering 2009-02-24 06:11:42 +01:00
parent ec9f8f10f3
commit 3c73025bf5
2 changed files with 37 additions and 0 deletions

View file

@ -255,6 +255,7 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
pa_bool_t work_done = TRUE; pa_bool_t work_done = TRUE;
pa_usec_t max_sleep_usec = 0, process_usec = 0; pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_play; size_t left_to_play;
unsigned j = 0;
pa_assert(u); pa_assert(u);
pa_sink_assert_ref(u->sink); pa_sink_assert_ref(u->sink);
@ -320,6 +321,15 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
break; break;
} }
if (++j > 10) {
#ifdef DEBUG_TIMING
pa_log_debug("Not filling up, because already too many iterations.");
#endif
break;
}
n_bytes -= u->hwbuf_unused; n_bytes -= u->hwbuf_unused;
polled = FALSE; polled = FALSE;
@ -399,6 +409,7 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
pa_bool_t work_done = FALSE; pa_bool_t work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0; pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_play; size_t left_to_play;
unsigned j = 0;
pa_assert(u); pa_assert(u);
pa_sink_assert_ref(u->sink); pa_sink_assert_ref(u->sink);
@ -449,6 +460,14 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
break; break;
} }
if (++j > 10) {
#ifdef DEBUG_TIMING
pa_log_debug("Not filling up, because already too many iterations.");
#endif
break;
}
n_bytes -= u->hwbuf_unused; n_bytes -= u->hwbuf_unused;
polled = FALSE; polled = FALSE;

View file

@ -248,6 +248,7 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
pa_bool_t work_done = FALSE; pa_bool_t work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0; pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_record; size_t left_to_record;
unsigned j = 0;
pa_assert(u); pa_assert(u);
pa_source_assert_ref(u->source); pa_source_assert_ref(u->source);
@ -303,6 +304,14 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
break; break;
} }
if (++j > 10) {
#ifdef DEBUG_TIMING
pa_log_debug("Not filling up, because already too many iterations.");
#endif
break;
}
polled = FALSE; polled = FALSE;
#ifdef DEBUG_TIMING #ifdef DEBUG_TIMING
@ -381,6 +390,7 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
int work_done = FALSE; int work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0; pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_record; size_t left_to_record;
unsigned j = 0;
pa_assert(u); pa_assert(u);
pa_source_assert_ref(u->source); pa_source_assert_ref(u->source);
@ -424,6 +434,14 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
break; break;
} }
if (++j > 10) {
#ifdef DEBUG_TIMING
pa_log_debug("Not filling up, because already too many iterations.");
#endif
break;
}
polled = FALSE; polled = FALSE;
for (;;) { for (;;) {