On Thu, 21 May 2009, Cristian Morales Vega wrote:
while(buffer.length > 0) { snd_pcm_sframes_t written = snd_pcm_writei(device.handle, buffer_ptr, buffer.length); if(written < 0) { snd_pcm_recover(device.handle, written, 1); } else if(written <= buffer.length) { buffer.length -= written; buffer_ptr += written; } }
This is correct.
? And still, in this case an interrupt would be handled by snd_pcm_recover() (written < 0) or by the "else" code?
-EINTR is just noop in recover() function:
if (err == -EINTR) /* nothing to do, continue */ return 0;
Also check returned value from recover() - if it's negative, other error occured.
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.