diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2014-10-18 08:32:14 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2014-10-18 08:32:14 -0500 |
| commit | 73512ad38f62e530d73737740ae1d94b52b8b9c4 (patch) | |
| tree | eeaa346cdb01ed99d4d9fb5d31d8b5822eb5dfdb /Source/Core/AudioCommon/OpenSLESStream.cpp | |
| parent | 742f9c6b14348b7279cb6b666a342fb2fcf4792c (diff) | |
Fix a race condition in our OpenSL ES audio backend.
After calling enqueue the callback would fire before we had assigned g_mixer a value.
This would cause a fun crash to happen.
Diffstat (limited to 'Source/Core/AudioCommon/OpenSLESStream.cpp')
| -rw-r--r-- | Source/Core/AudioCommon/OpenSLESStream.cpp | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/Source/Core/AudioCommon/OpenSLESStream.cpp b/Source/Core/AudioCommon/OpenSLESStream.cpp index afbaa00cdd..e4e11652e4 100644 --- a/Source/Core/AudioCommon/OpenSLESStream.cpp +++ b/Source/Core/AudioCommon/OpenSLESStream.cpp @@ -45,7 +45,6 @@ static void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context) // which for this code example would indicate a programming error _assert_msg_(AUDIO, SL_RESULT_SUCCESS == result, "Couldn't enqueue audio stream."); - curBuffer ^= 1; // Switch buffer // Render to the fresh buffer g_mixer->Mix(reinterpret_cast<short *>(buffer[curBuffer]), BUFFER_SIZE_IN_SAMPLES); @@ -101,17 +100,14 @@ bool OpenSLESStream::Start() result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_PLAYING); assert(SL_RESULT_SUCCESS == result); - // Render and enqueue a first buffer. (or should we just play the buffer empty?) - curBuffer = 0; + // Render and enqueue a first buffer. + curBuffer ^= 1; + g_mixer = m_mixer; - result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, buffer[curBuffer], sizeof(buffer[curBuffer])); + result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, buffer[0], sizeof(buffer[0])); if (SL_RESULT_SUCCESS != result) - { return false; - } - curBuffer ^= 1; - g_mixer = m_mixer; return true; } |
