From 8277d901e2d8efe135d5c33c4fbfba69a26b45b8 Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Sun, 13 Jan 2013 16:46:45 +0100 Subject: [PATCH] Smash some memory leaks --- Common/LogManager.cpp | 3 +++ Core/ELF/ElfReader.h | 42 ++++++++++++++++++++++++------------------ Core/System.cpp | 8 ++++++-- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/Common/LogManager.cpp b/Common/LogManager.cpp index f6fd94c98f..34523616de 100644 --- a/Common/LogManager.cpp +++ b/Common/LogManager.cpp @@ -71,6 +71,8 @@ LogManager::LogManager() m_debuggerLog = new DebuggerLogListener(); #else m_fileLog = NULL; + m_consoleLog = NULL; + m_debuggerLog = NULL; #endif for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) @@ -105,6 +107,7 @@ LogManager::~LogManager() delete m_fileLog; #if !defined(ANDROID) && !defined(IOS) && !defined(BLACKBERRY) delete m_consoleLog; + delete m_debuggerLog; #endif } diff --git a/Core/ELF/ElfReader.h b/Core/ELF/ElfReader.h index 9e98b46b9f..561543a105 100644 --- a/Core/ELF/ElfReader.h +++ b/Core/ELF/ElfReader.h @@ -32,20 +32,13 @@ typedef int SectionID; class ElfReader { - char *base; - u32 *base32; - Elf32_Ehdr *header; - Elf32_Phdr *segments; - Elf32_Shdr *sections; - u32 *sectionOffsets; - u32 *sectionAddrs; - bool bRelocate; - u32 entryPoint; - u32 vaddr; - u32 segmentVAddr[32]; public: - ElfReader(void *ptr) - { + ElfReader(void *ptr) : + sectionOffsets(0), + sectionAddrs(0), + bRelocate(false), + entryPoint(0), + vaddr(0) { INFO_LOG(LOADER, "ElfReader: %p", ptr); base = (char*)ptr; base32 = (u32 *)ptr; @@ -54,13 +47,12 @@ public: sections = (Elf32_Shdr *)(base + header->e_shoff); } - ~ElfReader() - { - + ~ElfReader() { + delete [] sectionOffsets; + delete [] sectionAddrs; } - u32 Read32(int off) - { + u32 Read32(int off) { return base32[off>>2]; } @@ -123,4 +115,18 @@ public: bool LoadInto(u32 vaddr); bool LoadSymbols(); void LoadRelocations(Elf32_Rel *rels, int numRelocs); + + +private: + char *base; + u32 *base32; + Elf32_Ehdr *header; + Elf32_Phdr *segments; + Elf32_Shdr *sections; + u32 *sectionOffsets; + u32 *sectionAddrs; + bool bRelocate; + u32 entryPoint; + u32 vaddr; + u32 segmentVAddr[32]; }; diff --git a/Core/System.cpp b/Core/System.cpp index 1e7e6c8241..5cba87d375 100644 --- a/Core/System.cpp +++ b/Core/System.cpp @@ -42,6 +42,7 @@ MetaFileSystem pspFileSystem; ParamSFOData g_paramSFO; static CoreParameter coreParameter; +static PSPMixer *mixer; bool PSP_Init(const CoreParameter &coreParam, std::string *error_string) { @@ -54,7 +55,8 @@ bool PSP_Init(const CoreParameter &coreParam, std::string *error_string) if (coreParameter.enableSound) { - host->InitSound(new PSPMixer()); + mixer = new PSPMixer(); + host->InitSound(mixer); } // Init all the HLE modules @@ -100,10 +102,12 @@ void PSP_Shutdown() if (coreParameter.enableSound) { host->ShutdownSound(); + delete mixer; + mixer = 0; } __KernelShutdown(); HLEShutdown(); - Memory::Shutdown() ; + Memory::Shutdown(); currentCPU = 0; }