EAGAIN can happen when we already could have passed frames to the slave.
If we then return EAGAIN to our caller it wrongly indicates that no frames
were send. Therefore return the processed frames instead.
BugLink: https://github.com/alsa-project/alsa-plugins/pull/8
Signed-off-by: Alexander Motzkau <a.motzkau@web.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
if (err < 0) {
if (err == -EPIPE)
io->state = SND_PCM_STATE_XRUN;
+ if (err == -EAGAIN)
+ break;
return err;
} else if (! err)
break;
do {
err = fill_data(io, areas, offset, size, interleaved);
- if (err < 0)
+ if (err <= 0)
break;
offset += (unsigned int)err;
size -= (unsigned int)err;