Changeset - r27844:cf08d34d52cb
[Not reviewed]
master
0 3 0
glx22 - 11 months ago 2023-07-06 16:18:03
glx@openttd.org
Codechange: [Emscripten] Improve syncfs synchronisation on exit/abort
3 files changed with 12 insertions and 12 deletions:
0 comments (0 inline, 0 general)
os/emscripten/pre.js
Show inline comments
 
@@ -49,30 +49,32 @@ Module.preRun.push(function() {
 
        }
 

	
 
        Module.removeRunDependency('syncfs');
 
    });
 

	
 
    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() {
 
        add_server = Module.cwrap("em_openttd_add_server", null, ["string"]);
 

	
 
        /* Add servers that support WebSocket here. Examples:
src/openttd.cpp
Show inline comments
 
@@ -115,13 +115,12 @@ void UserErrorI(const std::string &str)
 

	
 
#ifdef __EMSCRIPTEN__
 
	emscripten_exit_pointerlock();
 
	/* 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
 

	
 
	exit(1);
 
}
 

	
src/video/sdl2_v.cpp
Show inline comments
 
@@ -612,13 +612,12 @@ void VideoDriver_SDL_Base::LoopOnce()
 

	
 
		emscripten_cancel_main_loop();
 
		emscripten_exit_pointerlock();
 
		/* 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;
 
	}
 

	
 
	this->Tick();
0 comments (0 inline, 0 general)