https://github.com/libsdl-org/SDL/commit/1a552820512a23d948bbc87e8f9b52d2f6795326
From 1a552820512a23d948bbc87e8f9b52d2f6795326 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Thu, 6 Jul 2023 00:26:27 -0400
Subject: [PATCH] dsp: Some minor logic fixes
---
src/audio/dsp/SDL_dspaudio.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/audio/dsp/SDL_dspaudio.c b/src/audio/dsp/SDL_dspaudio.c
index 41df8d68f453..004acef98c69 100644
--- a/src/audio/dsp/SDL_dspaudio.c
+++ b/src/audio/dsp/SDL_dspaudio.c
@@ -209,14 +209,18 @@ static void DSP_WaitDevice(SDL_AudioDevice *device)
while (!SDL_AtomicGet(&device->shutdown)) {
audio_buf_info info;
const int rc = ioctl(h->audio_fd, ioctlreq, &info);
- if ((rc < 0) && (errno != EAGAIN)) { // Hmm, not much we can do - abort
+ if (rc < 0) {
+ if (errno == EAGAIN) {
+ continue;
+ }
+ // Hmm, not much we can do - abort
fprintf(stderr, "dsp WaitDevice ioctl failed (unrecoverable): %s\n", strerror(errno));
SDL_AudioDeviceDisconnected(device);
return;
} else if (info.bytes < device->buffer_size) {
SDL_Delay(10);
} else {
- break; /* ready to go! */
+ break; // ready to go!
}
}
}
@@ -227,6 +231,7 @@ static void DSP_PlayDevice(SDL_AudioDevice *device, const Uint8 *buffer, int buf
if (write(h->audio_fd, buffer, buflen) == -1) {
perror("Audio write");
SDL_AudioDeviceDisconnected(device);
+ return;
}
#ifdef DEBUG_AUDIO
fprintf(stderr, "Wrote %d bytes of audio data\n", h->mixlen);