snd_pcm_wait() returns an error. this will fix the bogus
return code of snd_pcm_readi/writei().
}
err = snd_pcm_wait(pcm, -1);
- if (err < 0)
- break;
state = snd_pcm_state(pcm);
+ if (err < 0) {
+ /* check more precisely */
+ if (state == SND_PCM_STATE_XRUN)
+ err = -EPIPE;
+ else if (state == SND_PCM_STATE_SUSPENDED)
+ err = -ESTRPIPE;
+ break;
+ }
goto _again;
}
}
err = snd_pcm_wait(pcm, -1);
- if (err < 0)
- break;
state = snd_pcm_state(pcm);
+ if (err < 0) {
+ /* check more precisely */
+ if (state == SND_PCM_STATE_XRUN)
+ err = -EPIPE;
+ else if (state == SND_PCM_STATE_SUSPENDED)
+ err = -ESTRPIPE;
+ break;
+ }
goto _again;
}