Răsfoiți Sursa

coreaudio: Possibly fixed another shutdown race condition.

Reference Issue #6159.
(cherry picked from commit e6640ef2d46a1baa34b4d893df661d17f0070b76)
Ryan C. Gordon 2 ani în urmă
părinte
comite
b0a2164b2c
1 a modificat fișierele cu 8 adăugiri și 8 ștergeri
  1. 8 8
      src/audio/coreaudio/SDL_coreaudio.m

+ 8 - 8
src/audio/coreaudio/SDL_coreaudio.m

@@ -701,6 +701,14 @@ COREAUDIO_CloseDevice(_THIS)
     }
 #endif
 
+    /* if callback fires again, feed silence; don't call into the app. */
+    SDL_AtomicSet(&this->paused, 1);
+
+    if (this->hidden->thread) {
+        SDL_assert(SDL_AtomicGet(&this->shutdown) != 0);  /* should have been set by SDL_audio.c */
+        SDL_WaitThread(this->hidden->thread, NULL);
+    }
+
     if (iscapture) {
         open_capture_devices--;
     } else {
@@ -725,18 +733,10 @@ COREAUDIO_CloseDevice(_THIS)
         open_devices = NULL;
     }
 
-    /* if callback fires again, feed silence; don't call into the app. */
-    SDL_AtomicSet(&this->paused, 1);
-
     if (this->hidden->audioQueue) {
         AudioQueueDispose(this->hidden->audioQueue, 1);
     }
 
-    if (this->hidden->thread) {
-        SDL_assert(SDL_AtomicGet(&this->shutdown) != 0);  /* should have been set by SDL_audio.c */
-        SDL_WaitThread(this->hidden->thread, NULL);
-    }
-
     if (this->hidden->ready_semaphore) {
         SDL_DestroySemaphore(this->hidden->ready_semaphore);
     }