Selaa lähdekoodia

coreaudio: fix race condition when closing an input device.

Ryan C. Gordon 1 vuosi sitten
vanhempi
commit
4659a84bd1
1 muutettua tiedostoa jossa 6 lisäystä ja 1 poistoa
  1. 6 1
      src/audio/coreaudio/SDL_coreaudio.m

+ 6 - 1
src/audio/coreaudio/SDL_coreaudio.m

@@ -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)