Solaris: debug my latest enbugging, take 2

Prevent partially played memchunks from getting lost.
If the sink has a memblock, don't leak it when rewinding.
This commit is contained in:
Finn Thain 2009-08-25 03:47:59 +10:00 committed by Lennart Poettering
parent 57e1f84f03
commit 457b973ba6

View file

@ -600,6 +600,10 @@ static void process_rewind(struct userdata *u) {
pa_log_debug("Requested to rewind %lu bytes.", (unsigned long) rewind_nbytes); pa_log_debug("Requested to rewind %lu bytes.", (unsigned long) rewind_nbytes);
rewind_nbytes = PA_MIN(u->memchunk.length, rewind_nbytes); rewind_nbytes = PA_MIN(u->memchunk.length, rewind_nbytes);
u->memchunk.length -= rewind_nbytes; u->memchunk.length -= rewind_nbytes;
if (u->memchunk.length <= 0 && u->memchunk.memblock) {
pa_memblock_unref(u->memchunk.memblock);
pa_memchunk_reset(&u->memchunk);
}
pa_log_debug("Rewound %lu bytes.", (unsigned long) rewind_nbytes); pa_log_debug("Rewound %lu bytes.", (unsigned long) rewind_nbytes);
} }
@ -671,8 +675,8 @@ static void thread_func(void *userdata) {
if (len < (size_t) u->minimum_request) if (len < (size_t) u->minimum_request)
break; break;
if (u->memchunk.length < len) if (!u->memchunk.length)
pa_sink_render(u->sink, len - u->memchunk.length, &u->memchunk); pa_sink_render(u->sink, u->sink->thread_info.max_request, &u->memchunk);
len = PA_MIN(u->memchunk.length, len); len = PA_MIN(u->memchunk.length, len);