diff options
author | Jesse Talavera-Greenberg <jesse@jesse.tg> | 2023-09-15 09:31:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-15 15:31:05 +0200 |
commit | db963aa002cdf943c86d19f8abd3f4fd40be38ec (patch) | |
tree | bded72c0147f3749d3f346266ed4b1321e3b2979 /src/frontend/qt_sdl/AudioInOut.cpp | |
parent | 1aaf22d181e55abb8ad27be89ebae106b1c1cfcf (diff) |
Make the NDS teardown more robust (#1798)
* Make cleanup a little more robust to mitigate undefined behavior
- Add some null checks before cleaning up the GPU3D renderer
- Make sure that all deleted objects are null
- Move cleanup logic out of an assert call
- Note that deleting a null pointer is a no-op, so there's no need to check for null beforehand
- Use RAII for GLCompositor instead of Init/DeInit methods
* Replace a DeInit call that I missed
* Make ARMJIT_Memory less likely to generate errors
- Set FastMem7/9Start to nullptr at the end
- Only close and unmap the file if it's initialized
* Make Renderer3D manage its resources with RAII
* Don't try to deallocate frontend resources that aren't loaded
* Make ARMJIT_Memory::DeInit more robust on the Switch
* Reset MemoryFile on Windows to INVALID_HANDLE_VALUE, not nullptr
- There is a difference
* Don't explicitly store a Valid state in GLCompositor or the 3D renderers
- Instead, create them with static methods while making the actual constructors private
* Make initialization of OpenGL resources fail if OpenGL isn't loaded
* assert that OpenGL is loaded instead of returning failure
Diffstat (limited to 'src/frontend/qt_sdl/AudioInOut.cpp')
-rw-r--r-- | src/frontend/qt_sdl/AudioInOut.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/frontend/qt_sdl/AudioInOut.cpp b/src/frontend/qt_sdl/AudioInOut.cpp index d44e92d..48e8a86 100644 --- a/src/frontend/qt_sdl/AudioInOut.cpp +++ b/src/frontend/qt_sdl/AudioInOut.cpp @@ -334,12 +334,17 @@ void Init() void DeInit() { if (audioDevice) SDL_CloseAudioDevice(audioDevice); + audioDevice = 0; MicClose(); - SDL_DestroyCond(audioSync); - SDL_DestroyMutex(audioSyncLock); + if (audioSync) SDL_DestroyCond(audioSync); + audioSync = nullptr; + + if (audioSyncLock) SDL_DestroyMutex(audioSyncLock); + audioSyncLock = nullptr; if (micWavBuffer) delete[] micWavBuffer; + micWavBuffer = nullptr; } void AudioSync() |