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/SPU.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/SPU.cpp')
-rw-r--r-- | src/SPU.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/SPU.cpp b/src/SPU.cpp index 734590e..e83a0c7 100644 --- a/src/SPU.cpp +++ b/src/SPU.cpp @@ -135,12 +135,18 @@ bool Init() void DeInit() { for (int i = 0; i < 16; i++) + { delete Channels[i]; + Channels[i] = nullptr; + } delete Capture[0]; delete Capture[1]; + Capture[0] = nullptr; + Capture[1] = nullptr; Platform::Mutex_Free(AudioLock); + AudioLock = nullptr; } void Reset() |