diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index a21762ec..2da13b67 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -487,9 +487,14 @@ static int snd_pcm_dmix_drain(snd_pcm_t *pcm) return -EBADFD; if (pcm->mode & SND_PCM_NONBLOCK) return -EAGAIN; - if (dmix->state == SND_PCM_STATE_PREPARED && - snd_pcm_mmap_playback_hw_avail(pcm) > 0) - snd_pcm_dmix_start(pcm); + if (dmix->state == SND_PCM_STATE_PREPARED) { + if (snd_pcm_mmap_playback_hw_avail(pcm) > 0) + snd_pcm_dmix_start(pcm); + else { + snd_pcm_dmix_drop(pcm); + return 0; + } + } stop_threshold = pcm->stop_threshold; if (pcm->stop_threshold > pcm->buffer_size) pcm->stop_threshold = pcm->buffer_size;