all repos — mgba @ f36caedb952020bc66806705616b7797e63c9ee4

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

f36caedb952020bc66806705616b7797e63c9ee4

parent

0191bb07683e176e4a9722c26fec335cdb032501

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

jump to
M CHANGESCHANGES

@@ -16,6 +16,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: - Qt: Improved HiDPI support - Feature: Support ImageMagick 7
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;