]> git.alsa-project.org Git - alsa-oss.git/commitdiff
pcm: check for XRUN state for GETxSPACE and GETxPTR ioctls
authorJaroslav Kysela <perex@perex.cz>
Thu, 17 Mar 2011 14:22:21 +0000 (15:22 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 17 Mar 2011 14:22:21 +0000 (15:22 +0100)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
alsa/pcm.c

index bfb0ccf40d73f4cff8dbfc02569367d9d10f0b7d..19b67e0fe8e460f6a4d30c956b772025f5760721 100644 (file)
@@ -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);