Browse Source

Fix memory leak in sound.cpp

Also link ASAN for devilutionx
pull/286/head
Gleb Mazovetskiy 7 years ago committed by Anders Jenbo
parent
commit
2bfcbbfb2f
  1. 10
      CMakeLists.txt
  2. 36
      SourceX/miniwin/dsound.h
  3. 1
      SourceX/sound.cpp

10
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++)

36
SourceX/miniwin/dsound.h

@ -1,18 +1,18 @@
#include "devilution.h"
#include <SDL_mixer.h>
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 <SDL_mixer.h>
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

1
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<DirectSoundBuffer *>(sound_file->DSB);
sound_file->DSB = NULL;
}

Loading…
Cancel
Save