Prevent redundant extension calls

This commit is contained in:
Zaid Abdulla committed 2018-03-24 00:45:12 -07:00
1 parent 52bec5b46f
commit 445b01e895
1 file changed
+23 -2
+23 -2
View File
@@ -39,6 +39,28 @@ const context = vm.createContext();
let state;
const runningExtensions = new WeakMap();
function runExtension(sessionContext, key, extCall, callback) {
let re = runningExtensions.get(sessionContext);
if (!re) {
re = {};
runningExtensions.set(sessionContext, re);
}
if (re[key]) {
re[key].push(callback);
}
else {
re[key] = [callback];
extensions.run(extCall, function(err, fault, res) {
if (!err && !fault)
sessionContext.extensionsCache[key] = res;
for (let c of re[key])
c(err, fault);
delete re[key];
});
}
}
class SandboxDate {
constructor() {
@@ -340,13 +362,12 @@ function run(script, globals, sessionContext, startRevision, maxRevision, callba
let counter = 3;
for (let key of Object.keys(_state.extensions)) {
counter += 2;
extensions.run(_state.extensions[key], function(err, fault, res) {
runExtension(_state.sessionContext, key, _state.extensions[key], function(err, fault) {
if (err || fault) {
if (counter & 1)
callback(err, fault);
return counter = 0;
}
_state.sessionContext.extensionsCache[key] = res;
if ((counter -= 2) === 1)
if (status === 2)
return run.apply(null, args);