From: Keqiao, Zhang Date: Fri, 26 Aug 2016 15:37:54 +0000 (+0800) Subject: alsabat: fix alsabat -86 error X-Git-Tag: v1.1.3~13 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=cadd877da6ebc8d26c8ec7f2717835e69525652f;p=alsa-utils.git 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 Signed-off-by: Takashi Iwai --- diff --git a/bat/alsa.c b/bat/alsa.c index cef1734..7613f44 100644 --- a/bat/alsa.c +++ b/bat/alsa.c @@ -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);