From 7d9fd48557ec9c44b4c7b23db02a38b02a45e92b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 20 Jun 2025 16:33:30 -0700 Subject: [PATCH] alsa: recover from snd_pcm_avail() returning -EPIPE --- src/audio/alsa/SDL_alsa_audio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index f8bd072bb3..4ba156e306 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -356,8 +356,12 @@ static bool ALSA_WaitDevice(SDL_AudioDevice *device) while (!SDL_GetAtomicInt(&device->shutdown)) { const int rc = ALSA_snd_pcm_avail(device->hidden->pcm); if (rc < 0) { - SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "ALSA wait failed (unrecoverable): %s", ALSA_snd_strerror(rc)); - return false; + const int status = ALSA_snd_pcm_recover(device->hidden->pcm, rc, 0); + if (status < 0) { + // Hmm, not much we can do - abort + SDL_LogError(SDL_LOG_CATEGORY_AUDIO, "ALSA wait failed (unrecoverable): %s", ALSA_snd_strerror(rc)); + return false; + } } if (rc >= sample_frames) { break;