فهرست منبع

fix audio deadlock

James Zipperer

Close the audio device before waiting for the audio thread to complete, which fixes a situation where the audio thread never completes

Add an additional check in the audio thread to see if the device is enabled and bail out if the device is no longer enabled
Sam Lantinga 9 سال پیش
والد
کامیت
2558c9c836
1فایلهای تغییر یافته به همراه4 افزوده شده و 3 حذف شده
  1. 4 3
      src/audio/SDL_audio.c

+ 4 - 3
src/audio/SDL_audio.c

@@ -1051,6 +1051,10 @@ close_audio_device(SDL_AudioDevice * device)
 {
     SDL_AtomicSet(&device->shutdown, 1);
     SDL_AtomicSet(&device->enabled, 0);
+
+    if (device->hidden != NULL) {
+        current_audio.impl.CloseDevice(device);
+    }
     if (device->thread != NULL) {
         SDL_WaitThread(device->thread, NULL);
     }
@@ -1061,9 +1065,6 @@ close_audio_device(SDL_AudioDevice * device)
     if (device->convert.needed) {
         SDL_free(device->convert.buf);
     }
-    if (device->hidden != NULL) {
-        current_audio.impl.CloseDevice(device);
-    }
 
     free_audio_queue(device->buffer_queue_head);
     free_audio_queue(device->buffer_queue_pool);