]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fix infinite loop in snd_pcm_wait()
authorTakashi Iwai <tiwai@suse.de>
Mon, 20 Feb 2006 19:34:45 +0000 (19:34 +0000)
committerTakashi Iwai <tiwai@suse.de>
Mon, 20 Feb 2006 19:34:45 +0000 (19:34 +0000)
Fix possible infinite loop in snd_pcm_wait() with direct plugins
when XRUN occurs during poll.

src/pcm/pcm_direct.c

index a136caa856eb89f8c68f626eb8304575ade29ef4..8be4d2a5a255fc5f66162bd5bdf767ef3ea09ef6 100644 (file)
@@ -569,6 +569,15 @@ int snd_pcm_direct_poll_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned in
                if (empty) {
                        snd_pcm_direct_clear_timer_queue(dmix);
                        events &= ~(POLLOUT|POLLIN);
+                       /* additional check */
+                       switch (snd_pcm_state(pcm)) {
+                       case SND_PCM_STATE_XRUN:
+                       case SND_PCM_STATE_SUSPENDED:
+                               events |= POLLERR;
+                               break;
+                       default:
+                               break;
+                       }
                }
                break;
        }