From d804496cc24336af4c6152a7874c9679b21726dd Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 23 Feb 2025 11:41:27 +0300 Subject: [PATCH] dsda: cache syncsettings until reboot works around crash described in #4104 --- .../Computers/Doom/DSDA.ISettable.cs | 7 ++++--- src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.ISettable.cs b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.ISettable.cs index 25b54cdff4..d7316bb3d2 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.ISettable.cs @@ -97,20 +97,21 @@ namespace BizHawk.Emulation.Cores.Computers.Doom private DoomSettings _settings; private DoomSyncSettings _syncSettings; + private DoomSyncSettings _finalSyncSettings; public DoomSettings GetSettings() => _settings.Clone(); public DoomSyncSettings GetSyncSettings() - => _syncSettings.Clone(); + => _finalSyncSettings.Clone(); public PutSettingsDirtyBits PutSettings(object o) => PutSettingsDirtyBits.None; public PutSettingsDirtyBits PutSyncSettings(DoomSyncSettings o) { - var ret = DoomSyncSettings.NeedsReboot(_syncSettings, o); - _syncSettings = o; + var ret = DoomSyncSettings.NeedsReboot(_finalSyncSettings, o); + _finalSyncSettings = o; return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None; } diff --git a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs index dd25013bca..142181c4cd 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs @@ -24,7 +24,7 @@ namespace BizHawk.Emulation.Cores.Computers.Doom { var ser = new BasicServiceProvider(this); ServiceProvider = ser; - _syncSettings = lp.SyncSettings ?? new DoomSyncSettings(); + _finalSyncSettings = _syncSettings = lp.SyncSettings ?? new DoomSyncSettings(); _settings = lp.Settings ?? new DoomSettings(); _controllerDeck = new DoomControllerDeck(_syncSettings.InputFormat, _syncSettings.Player1Present, _syncSettings.Player2Present, _syncSettings.Player3Present, _syncSettings.Player4Present); _loadCallback = LoadCallback;