Core: Fix some memory leaks
Jeffrey Pfau jeffrey@endrift.com
Wed, 07 Sep 2016 11:04:31 -0700
5 files changed,
11 insertions(+),
3 deletions(-)
M
src/gb/core.c
→
src/gb/core.c
@@ -74,6 +74,7 @@ if (gbcore->cheatDevice) {
mCheatDeviceDestroy(gbcore->cheatDevice); } free(gbcore->cheatDevice); + mCoreConfigFreeOpts(&core->opts); free(core); }
M
src/gb/gb.c
→
src/gb/gb.c
@@ -221,6 +221,11 @@
void GBDestroy(struct GB* gb) { GBUnloadROM(gb); + if (gb->biosVf) { + gb->biosVf->close(gb->biosVf); + gb->biosVf = 0; + } + GBMemoryDeinit(gb); GBVideoDeinit(&gb->video); GBSIODeinit(&gb->sio);
M
src/gba/core.c
→
src/gba/core.c
@@ -92,6 +92,7 @@ if (gbacore->cheatDevice) {
mCheatDeviceDestroy(gbacore->cheatDevice); } free(gbacore->cheatDevice); + mCoreConfigFreeOpts(&core->opts); free(core); }
M
src/gba/gba.c
→
src/gba/gba.c
@@ -140,6 +140,8 @@ GBAUnloadROM(gba);
if (gba->biosVf) { gba->biosVf->unmap(gba->biosVf, gba->memory.bios, SIZE_BIOS); + gba->biosVf->close(gba->biosVf); + gba->biosVf = 0; } GBAMemoryDeinit(gba);
M
src/platform/qt/GameController.cpp
→
src/platform/qt/GameController.cpp
@@ -406,9 +406,8 @@ m_threadContext.core->setVideoBuffer(m_threadContext.core, m_drawContext, width);
if (!m_bios.isNull() && m_useBios) { VFile* bios = VFileDevice::open(m_bios, O_RDONLY); - if (bios) { - // TODO: Lifetime issues? - m_threadContext.core->loadBIOS(m_threadContext.core, bios, 0); + if (bios && !m_threadContext.core->loadBIOS(m_threadContext.core, bios, 0)) { + bios->close(bios); } }