Skip to content

Commit

Permalink
coreaudio: fix race condition when closing an input device.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Mar 29, 2024
1 parent 2fd9447 commit 4659a84
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/audio/coreaudio/SDL_coreaudio.m
Expand Up @@ -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)
Expand Down

0 comments on commit 4659a84

Please sign in to comment.