summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/javascript/engine/engine.js1
-rw-r--r--platform/javascript/native/utils.js21
2 files changed, 19 insertions, 3 deletions
diff --git a/platform/javascript/engine/engine.js b/platform/javascript/engine/engine.js
index f8e216db2d..05a11701c0 100644
--- a/platform/javascript/engine/engine.js
+++ b/platform/javascript/engine/engine.js
@@ -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;
diff --git a/platform/javascript/native/utils.js b/platform/javascript/native/utils.js
index 0b3698fd86..8d0beba454 100644
--- a/platform/javascript/native/utils.js
+++ b/platform/javascript/native/utils.js
@@ -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 = "/";