From: "Keqiao, Zhang" <keqiao.zhang@xxxxxxxxx> 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@xxxxxxxxx> --- bat/alsa.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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); -- 2.5.0 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel