all repos — mgba @ 232e67f5291f2857dd92f9385e892adf14dab9af

mGBA Game Boy Advance Emulator

SDL: Fix race condition with audio thread when starting
Vicki Pfau vi@endrift.com
Mon, 03 Apr 2017 12:20:28 -0700
commit

232e67f5291f2857dd92f9385e892adf14dab9af

parent

4a38f9b97998fb977f04d2b980830d3b697a6bd4

2 files changed, 8 insertions(+), 5 deletions(-)

jump to
M CHANGESCHANGES

@@ -32,6 +32,7 @@ - Qt: Fix linking after some windows have been closed

- GBA Video: Fix wrong palette on 256-color sprites in OBJWIN - Windows: Fix VDir.rewind - SDL: Fix game crash check + - SDL: Fix race condition with audio thread when starting Misc: - SDL: Remove scancode key input - GBA Video: Clean up unused timers
M src/platform/sdl/main.csrc/platform/sdl/main.c

@@ -185,29 +185,31 @@

renderer->audio.samples = renderer->core->opts.audioBuffers; renderer->audio.sampleRate = 44100; - bool didFail = !mSDLInitAudio(&renderer->audio, &thread); + bool didFail = !mCoreThreadStart(&thread); if (!didFail) { #if SDL_VERSION_ATLEAST(2, 0, 0) mSDLSetScreensaverSuspendable(&renderer->events, renderer->core->opts.suspendScreensaver); mSDLSuspendScreensaver(&renderer->events); #endif - if (mCoreThreadStart(&thread)) { + if (mSDLInitAudio(&renderer->audio, &thread)) { renderer->runloop(renderer, &thread); mSDLPauseAudio(&renderer->audio); if (mCoreThreadHasCrashed(&thread)) { didFail = true; printf("The game crashed!\n"); } - mCoreThreadJoin(&thread); } else { didFail = true; - printf("Could not run game. Are you sure the file exists and is a compatible game?\n"); + printf("Could not initialize audio.\n"); } - #if SDL_VERSION_ATLEAST(2, 0, 0) mSDLResumeScreensaver(&renderer->events); mSDLSetScreensaverSuspendable(&renderer->events, false); #endif + + mCoreThreadJoin(&thread); + } else { + printf("Could not run game. Are you sure the file exists and is a compatible game?\n"); } renderer->core->unloadROM(renderer->core); return didFail;