make sure we call pa_sink_process_rewind() under all circumstances if a rewind was requested before we call pa_sink_render()

This commit is contained in:
Lennart Poettering 2008-06-28 00:14:46 +02:00
parent c7ebe2b191
commit e6ffec578d

View file

@ -895,6 +895,9 @@ static int process_rewind(struct userdata *u) {
rewind_nbytes = u->sink->thread_info.rewind_nbytes; rewind_nbytes = u->sink->thread_info.rewind_nbytes;
u->sink->thread_info.rewind_nbytes = 0; u->sink->thread_info.rewind_nbytes = 0;
if (rewind_nbytes <= 0)
goto finish;
pa_assert(rewind_nbytes > 0); pa_assert(rewind_nbytes > 0);
pa_log_debug("Requested to rewind %lu bytes.", (unsigned long) rewind_nbytes); pa_log_debug("Requested to rewind %lu bytes.", (unsigned long) rewind_nbytes);
@ -937,11 +940,17 @@ static int process_rewind(struct userdata *u) {
pa_sink_process_rewind(u->sink, rewind_nbytes); pa_sink_process_rewind(u->sink, rewind_nbytes);
u->after_rewind = TRUE; u->after_rewind = TRUE;
return 0;
} }
} else } else
pa_log_debug("Mhmm, actually there is nothing to rewind."); pa_log_debug("Mhmm, actually there is nothing to rewind.");
finish:
pa_sink_process_rewind(u->sink, 0);
return 0; return 0;
} }
static void thread_func(void *userdata) { static void thread_func(void *userdata) {
@ -967,12 +976,9 @@ static void thread_func(void *userdata) {
int work_done; int work_done;
pa_usec_t sleep_usec; pa_usec_t sleep_usec;
if (u->sink->thread_info.rewind_requested) { if (u->sink->thread_info.rewind_requested)
if (u->sink->thread_info.rewind_nbytes <= 0) if (process_rewind(u) < 0)
pa_sink_process_rewind(u->sink, 0);
else if (process_rewind(u) < 0)
goto fail; goto fail;
}
if (u->use_mmap) if (u->use_mmap)
work_done = mmap_write(u, &sleep_usec); work_done = mmap_write(u, &sleep_usec);