[HTML5] Close IDBFS database on exit.
This should be made available in emscripten in a decent way. Possibly after unmount, to free the database lock and allow performing operations on it from javascript after the Emscripten Runtime has exited.
This commit is contained in:
parent
47e82bcb58
commit
1bfc582633
2 changed files with 19 additions and 3 deletions
|
@ -121,6 +121,7 @@ Function('return this')()['Engine'] = (function() {
|
|||
me.rtenv['noExitRuntime'] = true;
|
||||
me.rtenv['onExecute'] = me.onExecute;
|
||||
me.rtenv['onExit'] = function(code) {
|
||||
me.rtenv['deinitFS']();
|
||||
if (me.onExit)
|
||||
me.onExit(code);
|
||||
me.rtenv = null;
|
||||
|
|
|
@ -29,8 +29,7 @@
|
|||
/*************************************************************************/
|
||||
|
||||
Module['initFS'] = function(persistentPaths) {
|
||||
FS.mkdir('/userfs');
|
||||
FS.mount(IDBFS, {}, '/userfs');
|
||||
Module.mount_points = ['/userfs'].concat(persistentPaths);
|
||||
|
||||
function createRecursive(dir) {
|
||||
try {
|
||||
|
@ -43,13 +42,14 @@ Module['initFS'] = function(persistentPaths) {
|
|||
}
|
||||
}
|
||||
|
||||
persistentPaths.forEach(function(path) {
|
||||
Module.mount_points.forEach(function(path) {
|
||||
createRecursive(path);
|
||||
FS.mount(IDBFS, {}, path);
|
||||
});
|
||||
return new Promise(function(resolve, reject) {
|
||||
FS.syncfs(true, function(err) {
|
||||
if (err) {
|
||||
Module.mount_points = [];
|
||||
Module.idbfs = false;
|
||||
console.log("IndexedDB not available: " + err.message);
|
||||
} else {
|
||||
|
@ -60,6 +60,21 @@ Module['initFS'] = function(persistentPaths) {
|
|||
});
|
||||
};
|
||||
|
||||
Module['deinitFS'] = function() {
|
||||
Module.mount_points.forEach(function(path) {
|
||||
try {
|
||||
FS.unmount(path);
|
||||
} catch (e) {
|
||||
console.log("Already unmounted", e);
|
||||
}
|
||||
if (Module.idbfs && IDBFS.dbs[path]) {
|
||||
IDBFS.dbs[path].close();
|
||||
delete IDBFS.dbs[path];
|
||||
}
|
||||
});
|
||||
Module.mount_points = [];
|
||||
};
|
||||
|
||||
Module['copyToFS'] = function(path, buffer) {
|
||||
var p = path.lastIndexOf("/");
|
||||
var dir = "/";
|
||||
|
|
Loading…
Reference in a new issue