dsda: cache syncsettings until reboot

works around crash described in #4104
This commit is contained in:
feos 2025-02-23 11:41:27 +03:00
parent 918783126e
commit d804496cc2
2 changed files with 5 additions and 4 deletions

View File

@ -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;
}

View File

@ -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;