]> git.alsa-project.org Git - alsa-lib.git/commitdiff
dmix: actually rewind when running or being drained
authorAlexander E. Patrakov <patrakov@gmail.com>
Sat, 13 Sep 2014 18:30:13 +0000 (00:30 +0600)
committerJaroslav Kysela <perex@perex.cz>
Sat, 13 Sep 2014 19:03:41 +0000 (21:03 +0200)
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_dmix.c

index 7c535093ea0f6ca5fb2accc0be3e4db3cdfd4a71..73cbe3f8d0b20b58de8f1f2810a19a38774b5661 100644 (file)
@@ -669,11 +669,15 @@ static snd_pcm_sframes_t snd_pcm_dmix_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t f
        snd_pcm_direct_t *dmix = pcm->private_data;
        snd_pcm_uframes_t slave_appl_ptr, slave_size;
        snd_pcm_uframes_t appl_ptr, size, transfer, result;
+       int err;
        const snd_pcm_channel_area_t *src_areas, *dst_areas;
 
        if (dmix->state == SND_PCM_STATE_RUNNING ||
-           dmix->state == SND_PCM_STATE_DRAINING)
-               return snd_pcm_dmix_hwsync(pcm);
+           dmix->state == SND_PCM_STATE_DRAINING) {
+               err = snd_pcm_dmix_hwsync(pcm);
+               if (err < 0)
+                       return err;
+       }
 
        if (dmix->last_appl_ptr < dmix->appl_ptr)
                size = dmix->appl_ptr - dmix->last_appl_ptr;