diff --git a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs index 1035e4ad69..8247a69dc0 100644 --- a/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs +++ b/src/BizHawk.Emulation.Cores/Calculators/Emu83/Emu83.IEmulator.cs @@ -41,6 +41,7 @@ namespace BizHawk.Emulation.Cores.Calculators.Emu83 public void Dispose() { + _memoryCallbacks.ActiveChanged -= SetMemoryCallbacks; if (Context != IntPtr.Zero) { LibEmu83.TI83_DestroyContext(Context); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Atari/jaguar/VirtualJaguar.cs b/src/BizHawk.Emulation.Cores/Consoles/Atari/jaguar/VirtualJaguar.cs index edd0072b0d..ea237f7033 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Atari/jaguar/VirtualJaguar.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Atari/jaguar/VirtualJaguar.cs @@ -300,5 +300,11 @@ namespace BizHawk.Emulation.Cores.Atari.Jaguar Marshal.Copy(_buf2352, 0, dst, 2352); DriveLightOn = true; } + + public override void Dispose() + { + _memoryCallbacks.ActiveChanged -= SetMemoryCallbacks; + base.Dispose(); + } } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs index 139e7b279d..383a32bad1 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs @@ -163,6 +163,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy public void Dispose() { + _memorycallbacks.ActiveChanged -= SetMemoryCallbacks; if (GambatteState != IntPtr.Zero) { LibGambatte.gambatte_destroy(GambatteState); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs index a7b177d0af..a7e3f83f6a 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs @@ -539,6 +539,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS _glContext = null; } + _memoryCallbacks.ActiveChanged -= SetMemoryCallbacks; + base.Dispose(); } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs index 1e9d96f298..749df63f47 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/SameBoy/SameBoy.IEmulator.cs @@ -156,6 +156,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Sameboy public void Dispose() { + _memorycallbacks.ActiveChanged -= SetMemoryCallbacks; if (SameboyState != IntPtr.Zero) { LibSameboy.sameboy_destroy(SameboyState); diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs index 716c9e941d..1ec620a458 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs @@ -122,6 +122,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { if (!_disposed) { + _memoryCallbacks.ActiveChanged -= RefreshMemCallbacks; _elf?.Dispose(); if (_cds != null) diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index c9c150d44c..6a387fb15d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -348,6 +348,8 @@ namespace BizHawk.Emulation.Cores.Sony.PSX disposed = true; + _memoryCallbacks.ActiveChanged -= RefreshMemCallbacks; + //discs arent bound to shock core instances, but they may be mounted. kill the core instance first to effectively dereference the disc OctoshockDll.shock_Destroy(psx); psx = IntPtr.Zero; diff --git a/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index f5d045bfa1..10cec3b421 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -52,6 +52,8 @@ namespace BizHawk.Emulation.Cores.WonderSwan public void Dispose() { + _inputCallbacks.ActiveChanged -= SetInputCallback; + _memorycallbacks.ActiveChanged -= SetMemoryCallbacks; if (Core != IntPtr.Zero) { BizSwan.bizswan_delete(Core);