From 89c276c962b7d6512930abab2d3270e4818d6151 Mon Sep 17 00:00:00 2001 From: Sonicadvance1 Date: Fri, 12 Feb 2010 16:40:13 +0000 Subject: [PATCH] Fix a Memory leak in CoreAudio backend, around 2MB. Stops OpenCL from trying to decode CMPR textures, as it fails horribly. Fixes a memory leak in EXI devices, where the destructor wouldn't be called, causing a 32MB leak with memory cards(if you have two), and maybe a bit more from the other EXI devices git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5042 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/AudioCommon/Src/CoreAudioSoundStream.cpp | 1 + Source/Core/Core/Src/HW/EXI_Device.h | 1 + Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h | 2 +- Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp | 2 ++ 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Core/AudioCommon/Src/CoreAudioSoundStream.cpp b/Source/Core/AudioCommon/Src/CoreAudioSoundStream.cpp index d336c833d3..680bc3a4d7 100644 --- a/Source/Core/AudioCommon/Src/CoreAudioSoundStream.cpp +++ b/Source/Core/AudioCommon/Src/CoreAudioSoundStream.cpp @@ -138,6 +138,7 @@ bool CoreAudioSound::CoreAudioInit() if(err) printf("Error while closing component\n"); + free(soundStruct); return true; } diff --git a/Source/Core/Core/Src/HW/EXI_Device.h b/Source/Core/Core/Src/HW/EXI_Device.h index ae79f213a4..173cec0b25 100644 --- a/Source/Core/Core/Src/HW/EXI_Device.h +++ b/Source/Core/Core/Src/HW/EXI_Device.h @@ -45,6 +45,7 @@ public: // Is generating interrupt ? virtual bool IsInterruptSet() {return false;} + virtual ~IEXIDevice() {}; }; diff --git a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h index 2acc4d7577..e263af9188 100644 --- a/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h +++ b/Source/Core/Core/Src/HW/EXI_DeviceMemoryCard.h @@ -33,7 +33,7 @@ class CEXIMemoryCard : public IEXIDevice { public: CEXIMemoryCard(const std::string& _rName, const std::string& _rFilename, int card_index); - virtual ~CEXIMemoryCard(); + ~CEXIMemoryCard(); void SetCS(int cs); void Update(); bool IsInterruptSet(); diff --git a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp index 3baf4d10cd..6b038ba337 100644 --- a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp @@ -162,6 +162,8 @@ PC_TexFormat TexDecoder_Decode_OpenCL(u8 *dst, const u8 *src, int width, int hei formatResult = PC_TEX_FMT_BGRA32; break; case GX_TF_CMPR: + // Doesn't decode correctly + return PC_TEX_FMT_NONE; kernelToRun = Decoders[7].kernel; sizeOfSrc = sizeof(u8) / 2.0f; sizeOfDst = sizeof(u32);