summaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2009-08-25 03:47:59 +1000
committerLennart Poettering <lennart@poettering.net>2009-08-25 03:18:50 +0200
commit457b973ba69d1a417d438b8716389464eb62e049 (patch)
tree083d1c2e0c98763dd564e6a6a505ac4d61e77564 /src/modules
parent57e1f84f03735c1f285a65cb154d8dd7a229a3b6 (diff)
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.
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/module-solaris.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/modules/module-solaris.c b/src/modules/module-solaris.c
index 71f14071..b0d4db43 100644
--- a/src/modules/module-solaris.c
+++ b/src/modules/module-solaris.c
@@ -600,6 +600,10 @@ static void process_rewind(struct userdata *u) {
pa_log_debug("Requested to rewind %lu bytes.", (unsigned long) rewind_nbytes);
rewind_nbytes = PA_MIN(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);
}
@@ -671,8 +675,8 @@ static void thread_func(void *userdata) {
if (len < (size_t) u->minimum_request)
break;
- if (u->memchunk.length < len)
- pa_sink_render(u->sink, len - u->memchunk.length, &u->memchunk);
+ if (!u->memchunk.length)
+ pa_sink_render(u->sink, u->sink->thread_info.max_request, &u->memchunk);
len = PA_MIN(u->memchunk.length, len);