From 2bfcbbfb2f1e623e47a5e4205c07e7e3458a33b7 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Wed, 25 Sep 2019 20:08:19 +0100 Subject: [PATCH] Fix memory leak in sound.cpp Also link ASAN for devilutionx --- CMakeLists.txt | 10 +++++----- SourceX/miniwin/dsound.h | 36 ++++++++++++++++++------------------ SourceX/sound.cpp | 1 + 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aaa4a1f59..775f37a38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -247,12 +247,12 @@ foreach(target devilution devilutionx) SDL2::SDL2_ttf SDL2::SDL2_mixer) endif() -endforeach(target devilution devilutionx) -if(ASAN) - target_compile_options(devilution PUBLIC -fsanitize=address -fsanitize-recover=address) - target_link_libraries(devilution PUBLIC -fsanitize=address -fsanitize-recover=address) -endif() + if(ASAN) + target_compile_options(${target} PUBLIC -fsanitize=address -fsanitize-recover=address) + target_link_libraries(${target} PUBLIC -fsanitize=address -fsanitize-recover=address) + endif() +endforeach(target devilution devilutionx) if(DIST AND NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_link_libraries(devilutionx PUBLIC -static-libgcc -static-libstdc++) diff --git a/SourceX/miniwin/dsound.h b/SourceX/miniwin/dsound.h index 8ebfa3bc1..6c3ed4b5f 100644 --- a/SourceX/miniwin/dsound.h +++ b/SourceX/miniwin/dsound.h @@ -1,18 +1,18 @@ -#include "devilution.h" - -#include - -namespace dvl { - -struct DirectSoundBuffer : public IDirectSoundBuffer { -public: - virtual void Release(); - void GetStatus(LPDWORD pdwStatus); - void Play(int lVolume, int lPan); - void Stop(); - const char *SetChunk(BYTE *fileData, DWORD dwBytes); - private: - Mix_Chunk *chunk; -}; - -} // namespace dvl +#include "devilution.h" + +#include + +namespace dvl { + +struct DirectSoundBuffer final : public IDirectSoundBuffer { +public: + void Release() override; + void GetStatus(LPDWORD pdwStatus) override; + void Play(int lVolume, int lPan) override; + void Stop() override; + const char *SetChunk(BYTE *fileData, DWORD dwBytes) override; + private: + Mix_Chunk *chunk; +}; + +} // namespace dvl diff --git a/SourceX/sound.cpp b/SourceX/sound.cpp index d7aa18298..3eaa75159 100644 --- a/SourceX/sound.cpp +++ b/SourceX/sound.cpp @@ -114,6 +114,7 @@ void sound_file_cleanup(TSnd *sound_file) if (sound_file->DSB) { sound_file->DSB->Stop(); sound_file->DSB->Release(); + delete static_cast(sound_file->DSB); sound_file->DSB = NULL; }