]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: Fix suspend/resume regression with dmix & co
authorTakashi Iwai <tiwai@suse.de>
Wed, 11 May 2016 07:06:47 +0000 (09:06 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 11 May 2016 07:06:47 +0000 (09:06 +0200)
The recent fix commit [8985742d91db: pcm: dmix: Handle slave PCM xrun
and unexpected states properly] caused a regression in dmix and other
plugins regarding suspend/resume.  For example, aplay endlessly prints
"Suspended. Trying resume. Done." message if suspend and resume are
performed in the middle of playback.

The reason is that the commit above changed the shadow PCM state
(dmix->state) to SUSPENDED when the slave PCM is in suspend, while it
doesn't restore the shadow state upon resume.  Thus it appears as if
it's always suspended even after the resume is invoked.

The fix is just to add the proper update of the shadow state in
snd_pcm_direct_resume().

Reported-by: Shengjiu Wang <shengjiu.wang@freescale.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/pcm/pcm_direct.c

index 14de734d98ebbcf4dfcafa0974e0463b46952801..e28738b0de96d3ed1d6b2c35bd402706c12fac78 100644 (file)
@@ -848,6 +848,7 @@ int snd_pcm_direct_resume(snd_pcm_t *pcm)
                snd_pcm_start(dmix->spcm);
                err = 0;
        }
+       dmix->state = snd_pcm_state(dmix->spcm);
        snd_pcm_direct_semaphore_up(dmix, DIRECT_IPC_SEM_CLIENT);
        return err;
 }