mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-23 11:27:58 +01:00
Fix potential races.
This commit is contained in:
@@ -329,10 +329,11 @@ var Modes = Module("modes", {
|
|||||||
{ push: push }, push);
|
{ push: push }, push);
|
||||||
|
|
||||||
for (let [id, { obj, prop, test }] in Iterator(this.boundProperties)) {
|
for (let [id, { obj, prop, test }] in Iterator(this.boundProperties)) {
|
||||||
if (!obj.get())
|
obj = obj.get();
|
||||||
|
if (!obj)
|
||||||
delete this.boundProperties[id];
|
delete this.boundProperties[id];
|
||||||
else
|
else
|
||||||
this.topOfStack.saved[id] = { obj: obj.get(), prop: prop, value: obj.get()[prop], test: test };
|
this.topOfStack.saved[id] = { obj: obj, prop: prop, value: obj[prop], test: test };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -103,11 +103,12 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen
|
|||||||
target = null;
|
target = null;
|
||||||
|
|
||||||
this.setData(doc, "listeners", listeners.filter(function (args) {
|
this.setData(doc, "listeners", listeners.filter(function (args) {
|
||||||
if (target == null || args[0].get() == target && args[1] == event && args[2].wrapped == callback && args[3] == capture) {
|
let elem = args[0].get();
|
||||||
args[0].get().removeEventListener.apply(args[0].get(), args.slice(1));
|
if (target == null || elem == target && args[1] == event && args[2].wrapped == callback && args[3] == capture) {
|
||||||
|
elem.removeEventListener.apply(elem, args.slice(1));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return !args[0].get();
|
return elem;
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -351,9 +351,10 @@ var Prefs = Module("prefs", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
|
|||||||
if (observers) {
|
if (observers) {
|
||||||
let value = this.get(data, false);
|
let value = this.get(data, false);
|
||||||
this._observers[data] = observers.filter(function (callback) {
|
this._observers[data] = observers.filter(function (callback) {
|
||||||
if (!callback.get())
|
callback = callback.get();
|
||||||
|
if (!callback)
|
||||||
return false;
|
return false;
|
||||||
util.trapErrors(callback.get(), null, value);
|
util.trapErrors(callback, null, value);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user