From b41dbfd28d6f940004f412f3ef16a1419240786f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 6 Sep 2007 23:29:16 +0000 Subject: fix an assert when runnig module-oss in record only-mode. optimize allocation of memblocks on playback git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1777 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/modules/module-alsa-source.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/modules/module-alsa-source.c') diff --git a/src/modules/module-alsa-source.c b/src/modules/module-alsa-source.c index 9922668b..365f6ab2 100644 --- a/src/modules/module-alsa-source.c +++ b/src/modules/module-alsa-source.c @@ -210,7 +210,7 @@ static int unix_read(struct userdata *u) { for (;;) { void *p; - snd_pcm_sframes_t t; + snd_pcm_sframes_t t, k; ssize_t l; int err; pa_memchunk chunk; @@ -228,10 +228,17 @@ static int unix_read(struct userdata *u) { if (l <= 0) return work_done; - chunk.memblock = pa_memblock_new(u->core->mempool, l); + chunk.memblock = pa_memblock_new(u->core->mempool, (size_t) -1); + + k = pa_memblock_get_length(chunk.memblock); + + if (k > l) + k = l; + + k = (k/u->frame_size)*u->frame_size; p = pa_memblock_acquire(chunk.memblock); - t = snd_pcm_readi(u->pcm_handle, (uint8_t*) p, l / u->frame_size); + t = snd_pcm_readi(u->pcm_handle, (uint8_t*) p, k / u->frame_size); pa_memblock_release(chunk.memblock); /* pa_log("wrote %i bytes of %u (%u)", t*u->frame_size, u->memchunk.length, l); */ -- cgit