coreaudio: fix race condition when closing an input device.

main
Ryan C. Gordon 2024-03-29 00:55:38 -04:00
parent 2fd9447670
commit 4659a84bd1
1 changed files with 6 additions and 1 deletions

View File

@ -621,7 +621,12 @@ static void InputBufferReadyCallback(void *inUserData, AudioQueueRef inAQ, Audio
SDL_assert(device->hidden->current_buffer == NULL); // shouldn't have anything pending
device->hidden->current_buffer = inBuffer;
SDL_CaptureAudioThreadIterate(device);
SDL_assert(device->hidden->current_buffer == NULL); // CaptureFromDevice/FlushCapture should have enqueued and cleaned it out.
// buffer is unexpectedly here? We're probably dying, but try to requeue this buffer anyhow.
if (device->hidden->current_buffer != NULL) {
SDL_assert(SDL_AtomicGet(&device->shutdown) != 0);
COREAUDIO_FlushCapture(device); // just flush it manually, which will requeue it.
}
}
static void COREAUDIO_CloseDevice(SDL_AudioDevice *device)