1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 14:02:28 +01:00

Fix potential races.

This commit is contained in:
Kris Maglione
2014-02-23 12:20:22 -08:00
parent 9470e18566
commit c37656f731
3 changed files with 10 additions and 7 deletions

View File

@@ -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 };
} }
} }

View File

@@ -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;
})); }));
}, },

View File

@@ -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;
}); });
} }