Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
Protect SDL_PauseAudio*() with the audio callback lock.
Otherwise, you can pause audio and still have the callback running, or run
 one more time. This makes sure the callback is definitely stopped by the
 time you return from SDL_PauseAudio().
  • Loading branch information
icculus committed Jul 14, 2013
1 parent e4a866c commit d6f37e01f6955d8d179fe37b0cedc98a9bbbc9ee
Showing with 4 additions and 2 deletions.
  1. +4 −2 src/audio/SDL_audio.c
@@ -480,13 +480,13 @@ SDL_RunAudio(void *devicep)
}
}

SDL_LockMutex(device->mixer_lock);
if (device->paused) {
SDL_memset(stream, silence, stream_len);
} else {
SDL_LockMutex(device->mixer_lock);
(*fill) (udata, stream, stream_len);
SDL_UnlockMutex(device->mixer_lock);
}
SDL_UnlockMutex(device->mixer_lock);

/* Convert the audio if necessary */
if (device->convert.needed) {
@@ -1114,7 +1114,9 @@ SDL_PauseAudioDevice(SDL_AudioDeviceID devid, int pause_on)
{
SDL_AudioDevice *device = get_audio_device(devid);
if (device) {
current_audio.impl.LockDevice(device);
device->paused = pause_on;
current_audio.impl.UnlockDevice(device);
}
}

0 comments on commit d6f37e0

Please sign in to comment.