From 3d1c4a8589ed31728da29c2a8830f4acd96e94eb Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 6 Jul 2023 18:18:03 +0200 Subject: [PATCH] Codechange: [Emscripten] Improve syncfs synchronisation on exit/abort --- os/emscripten/pre.js | 22 ++++++++++++---------- src/openttd.cpp | 1 - src/video/sdl2_v.cpp | 1 - 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/os/emscripten/pre.js b/os/emscripten/pre.js index c242e13fd0..68e76678aa 100644 --- a/os/emscripten/pre.js +++ b/os/emscripten/pre.js @@ -52,24 +52,26 @@ Module.preRun.push(function() { }); window.openttd_syncfs_shown_warning = false; - window.openttd_syncfs = function() { + window.openttd_syncfs = function(callback) { /* Copy the virtual FS to the persistent storage. */ - FS.syncfs(false, function (err) { }); + FS.syncfs(false, function (err) { + /* On first time, warn the user about the volatile behaviour of + * persistent storage. */ + if (!window.openttd_syncfs_shown_warning) { + window.openttd_syncfs_shown_warning = true; + Module.onWarningFs(); + } - /* On first time, warn the user about the volatile behaviour of - * persistent storage. */ - if (!window.openttd_syncfs_shown_warning) { - window.openttd_syncfs_shown_warning = true; - Module.onWarningFs(); - } + if (callback) callback(); + }); } window.openttd_exit = function() { - Module.onExit(); + window.openttd_syncfs(Module.onExit); } window.openttd_abort = function() { - Module.onAbort(); + window.openttd_syncfs(Module.onAbort); } window.openttd_server_list = function() { diff --git a/src/openttd.cpp b/src/openttd.cpp index 5356f38fbd..6fb3b4a34f 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -118,7 +118,6 @@ void UserErrorI(const std::string &str) /* In effect, the game ends here. As emscripten_set_main_loop() caused * the stack to be unwound, the code after MainLoop() in * openttd_main() is never executed. */ - EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); EM_ASM(if (window["openttd_abort"]) openttd_abort()); #endif diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index eb201f0774..1f18d143fd 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -615,7 +615,6 @@ void VideoDriver_SDL_Base::LoopOnce() /* In effect, the game ends here. As emscripten_set_main_loop() caused * the stack to be unwound, the code after MainLoop() in * openttd_main() is never executed. */ - EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); EM_ASM(if (window["openttd_exit"]) openttd_exit()); #endif return;