diff --git a/CHANGES b/CHANGES index a0b87e214..5f82de643 100644 --- a/CHANGES +++ b/CHANGES @@ -23,6 +23,7 @@ Other fixes: - Core: Fix inconsistencies with setting game-specific overrides (fixes mgba.io/i/2963) - Debugger: Fix writing to specific segment in command-line debugger - GB: Fix uninitialized save data when loading undersized temporary saves + - GB, GBA Core: Fix memory leak if reloading debug symbols - GBA Audio: Fix crash if audio FIFOs and timers get out of sync - GBA Audio: Fix crash in audio subsampling if timing lockstep breaks - GBA Memory: Let raw access read high MMIO addresses diff --git a/src/gb/core.c b/src/gb/core.c index 9dbf36bc1..4e8351fc6 100644 --- a/src/gb/core.c +++ b/src/gb/core.c @@ -1107,7 +1107,9 @@ static void _GBCoreDetachDebugger(struct mCore* core) { } static void _GBCoreLoadSymbols(struct mCore* core, struct VFile* vf) { - core->symbolTable = mDebuggerSymbolTableCreate(); + if (!core->symbolTable) { + core->symbolTable = mDebuggerSymbolTableCreate(); + } #ifdef ENABLE_VFS if (!vf && core->dirs.base) { vf = mDirectorySetOpenSuffix(&core->dirs, core->dirs.base, ".sym", O_RDONLY); diff --git a/src/gba/core.c b/src/gba/core.c index 256aebdab..8e44990b5 100644 --- a/src/gba/core.c +++ b/src/gba/core.c @@ -1243,7 +1243,14 @@ static void _GBACoreDetachDebugger(struct mCore* core) { static void _GBACoreLoadSymbols(struct mCore* core, struct VFile* vf) { bool closeAfter = false; - core->symbolTable = mDebuggerSymbolTableCreate(); + if (!core->symbolTable) { + core->symbolTable = mDebuggerSymbolTableCreate(); + } + off_t seek; + if (vf) { + seek = vf->seek(vf, 0, SEEK_CUR); + vf->seek(vf, 0, SEEK_SET); + } #ifdef ENABLE_VFS #ifdef USE_ELF if (!vf && core->dirs.base) { @@ -1273,6 +1280,8 @@ static void _GBACoreLoadSymbols(struct mCore* core, struct VFile* vf) { } if (closeAfter) { vf->close(vf); + } else { + vf->seek(vf, seek, SEEK_SET); } }