alsabat: fix alsabat -86 error

alsabat reports -86 error when system suspend and resume. Check the
return value of read_to_pcm() and write_to_pcm(), when -x8 err is
detected, do resume and wait for read/write to pcm to complete.

Write PCM device error: Streams pipe error(-86)
Read PCM device error: Streams pipe error(-86)
*** Error in alsabat: double free or corruption (out): 0x00007fb438001810 ***

Signed-off-by: Keqiao, Zhang <keqiao.zhang@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Keqiao, Zhang 2016-08-26 23:37:54 +08:00 committed by Takashi Iwai
parent 18a1ed8f89
commit cadd877da6

View file

@ -319,6 +319,11 @@ static int write_to_pcm(const struct pcm_container *sndpcm,
if (bat->roundtriplatency)
bat->latency.xrun_error = true;
snd_pcm_prepare(sndpcm->handle);
} else if (err == -ESTRPIPE) {
while ((err = snd_pcm_resume(sndpcm->handle)) == -EAGAIN)
sleep(1); /* wait until resume flag is released */
if (err < 0)
snd_pcm_prepare(sndpcm->handle);
} else if (err < 0) {
fprintf(bat->err, _("Write PCM device error: %s(%d)\n"),
snd_strerror(err), err);
@ -518,6 +523,11 @@ static int read_from_pcm(struct pcm_container *sndpcm,
snd_strerror(err), err);
if (bat->roundtriplatency)
bat->latency.xrun_error = true;
} else if (err == -ESTRPIPE) {
while ((err = snd_pcm_resume(sndpcm->handle)) == -EAGAIN)
sleep(1); /* wait until resume flag is released */
if (err < 0)
snd_pcm_prepare(sndpcm->handle);
} else if (err < 0) {
fprintf(bat->err, _("Read PCM device error: %s(%d)\n"),
snd_strerror(err), err);