From 1dfe1bb78a48077b699fe96a834ce0e78df386e3 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 17 Mar 2011 15:22:21 +0100 Subject: [PATCH] pcm: check for XRUN state for GETxSPACE and GETxPTR ioctls Signed-off-by: Jaroslav Kysela --- alsa/pcm.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/alsa/pcm.c b/alsa/pcm.c index bfb0ccf..19b67e0 100644 --- a/alsa/pcm.c +++ b/alsa/pcm.c @@ -1096,6 +1096,12 @@ int lib_oss_pcm_ioctl(int fd, unsigned long cmd, ...) break; } state = snd_pcm_state(pcm); + if (state == SND_PCM_STATE_XRUN) { + err = xrun(pcm); + if (err < 0) + break; + state = snd_pcm_state(pcm); + } if (state == SND_PCM_STATE_SUSPENDED) { err = resume(pcm); if (err < 0) @@ -1135,6 +1141,12 @@ int lib_oss_pcm_ioctl(int fd, unsigned long cmd, ...) break; } state = snd_pcm_state(pcm); + if (state == SND_PCM_STATE_XRUN) { + err = xrun(pcm); + if (err < 0) + break; + state = snd_pcm_state(pcm); + } if (state == SND_PCM_STATE_SUSPENDED) { err = resume(pcm); if (err < 0) @@ -1174,6 +1186,12 @@ int lib_oss_pcm_ioctl(int fd, unsigned long cmd, ...) break; } state = snd_pcm_state(pcm); + if (state == SND_PCM_STATE_XRUN) { + err = xrun(pcm); + if (err < 0) + break; + state = snd_pcm_state(pcm); + } if (state == SND_PCM_STATE_SUSPENDED) { err = resume(pcm); if (err < 0) @@ -1221,6 +1239,12 @@ int lib_oss_pcm_ioctl(int fd, unsigned long cmd, ...) err = -EINVAL; break; } + if (state == SND_PCM_STATE_XRUN) { + err = xrun(pcm); + if (err < 0) + break; + state = snd_pcm_state(pcm); + } state = snd_pcm_state(pcm); if (state == SND_PCM_STATE_SUSPENDED) { err = resume(pcm); -- 2.47.1