diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-07-22 22:38:38 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-07-22 22:38:38 +0200 |
commit | 7e2afffb81ab8b495d4f769858a855c2df2c0610 (patch) | |
tree | 74a23a142b0b5ab93ad7a22837e1ceffe46605ef /src/modules/alsa/alsa-source.c | |
parent | 6fdd5846b24dd9346bfa5abae1fd727189681477 (diff) |
alsa: deal properly with IO functions asking us to write 0 bytes
Diffstat (limited to 'src/modules/alsa/alsa-source.c')
-rw-r--r-- | src/modules/alsa/alsa-source.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c index a6760e1e..41bb768b 100644 --- a/src/modules/alsa/alsa-source.c +++ b/src/modules/alsa/alsa-source.c @@ -473,6 +473,9 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled if (frames > pa_mempool_block_size_max(u->source->core->mempool)/u->frame_size) frames = pa_mempool_block_size_max(u->source->core->mempool)/u->frame_size; + if (frames == 0) + break; + /* Check these are multiples of 8 bit */ pa_assert((areas[0].first & 7) == 0); pa_assert((areas[0].step & 7)== 0); @@ -599,7 +602,10 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled frames = snd_pcm_readi(u->pcm_handle, (uint8_t*) p, (snd_pcm_uframes_t) frames); pa_memblock_release(chunk.memblock); - pa_assert(frames != 0); + if (frames == 0) { + pa_memblock_unref(chunk.memblock); + break; + } if (PA_UNLIKELY(frames < 0)) { pa_memblock_unref(chunk.memblock); |