فهرست منبع

audio: Make SDL_AudioDevice::shutdown an atomic value.

Just to make sure this get communicated to the audio thread properly.
Ryan C. Gordon 10 سال پیش
والد
کامیت
c754662dda
2فایلهای تغییر یافته به همراه5 افزوده شده و 5 حذف شده
  1. 3 3
      src/audio/SDL_audio.c
  2. 2 2
      src/audio/SDL_sysaudio.h

+ 3 - 3
src/audio/SDL_audio.c

@@ -103,7 +103,7 @@ static const AudioBootStrap *const bootstrap[] = {
     &ESD_bootstrap,
 #endif
 #if SDL_AUDIO_DRIVER_NACL
-   &NACLAUD_bootstrap,
+    &NACLAUD_bootstrap,
 #endif
 #if SDL_AUDIO_DRIVER_NAS
     &NAS_bootstrap,
@@ -611,7 +611,7 @@ SDL_RunAudio(void *devicep)
     current_audio.impl.ThreadInit(device);
 
     /* Loop, filling the audio buffers */
-    while (!device->shutdown) {
+    while (!SDL_AtomicGet(&device->shutdown)) {
         /* Fill the current buffer with sound */
         if (device->convert.needed) {
             stream = device->convert.buf;
@@ -874,7 +874,7 @@ static void
 close_audio_device(SDL_AudioDevice * device)
 {
     device->enabled = 0;
-    device->shutdown = 1;
+    SDL_AtomicSet(&device->shutdown, 1);
     if (device->thread != NULL) {
         SDL_WaitThread(device->thread, NULL);
     }

+ 2 - 2
src/audio/SDL_sysaudio.h

@@ -157,10 +157,10 @@ struct SDL_AudioDevice
     SDL_AudioStreamer streamer;
 
     /* Current state flags */
-    /* !!! FIXME: should be SDL_bool */
+    SDL_atomic_t shutdown; /* true if we are signaling the play thread to end. */
+    /* !!! FIXME: these should be SDL_bool */
     int iscapture;
     int enabled;  /* true if device is functioning and connected. */
-    int shutdown; /* true if we are signaling the play thread to end. */
     int paused;
     int opened;