From 940d9aa99d1237ca5440ae2bbc276cfbe2276c46 Mon Sep 17 00:00:00 2001 From: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Date: Wed, 15 Sep 2021 18:26:35 -0700 Subject: [PATCH] Cache savefiles just for a tick, likely fixing savefile misses (#61469) --- code/modules/client/preferences/_preference.dm | 8 ++++++++ code/modules/client/preferences_savefile.dm | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index 0f5de07a7df..093ea1af597 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -204,13 +204,21 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) if (!parent) return null + // Both of these will cache savefiles, but only for a tick. + // This is because storing a savefile will lock it, causing later issues down the line. + switch (savefile_identifier) if (PREFERENCE_CHARACTER) + if (!character_savefile) + character_savefile = new /savefile(path) + character_savefile.cd = "/character[default_slot]" + addtimer(VARSET_CALLBACK(src, character_savefile, null), 1) return character_savefile if (PREFERENCE_PLAYER) if (!game_savefile) game_savefile = new /savefile(path) game_savefile.cd = "/" + addtimer(VARSET_CALLBACK(src, game_savefile, null), 1) return game_savefile else CRASH("Unknown savefile identifier [savefile_identifier]") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ca1e4a82d3a..f1ff9b316ab 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -279,6 +279,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return FALSE if(!fexists(path)) return FALSE + + character_savefile = null + var/savefile/S = new /savefile(path) if(!S) return FALSE @@ -291,7 +294,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["default_slot"] , slot) S.cd = "/character[slot]" - character_savefile = S var/needs_update = savefile_needs_update(S) if(needs_update == -2) //fatal, can't load any data return FALSE @@ -377,7 +379,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return TRUE - /proc/sanitize_keybindings(value) var/list/base_bindings = sanitize_islist(value,list()) for(var/keybind_name in base_bindings)