From 512b01d57468d990305b369a794ff0564806285f Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 17 Feb 2014 14:33:00 -0800 Subject: [PATCH] Flush literals from cache on :rehash. --- common/modules/base.jsm | 10 +++++++++- common/modules/cache.jsm | 12 +++++++++--- common/modules/util.jsm | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/common/modules/base.jsm b/common/modules/base.jsm index b8e0cedc..58e1744e 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -972,8 +972,16 @@ Class.prototype = { util.rehashing && !isinstance(Cu.getGlobalForObject(callback), ["BackstagePass"])) return; this.timeouts.splice(this.timeouts.indexOf(timer), 1); - util.trapErrors(callback, this); + try { + callback.call(this); + } + catch (e) { + util.dump("Error invoking timer callback registered at " + + [frame.filename, frame.lineNumber, ""].join(":")); + Cu.reportError(e); + } }; + let frame = Cs.caller; let timer = services.Timer(timeout_notify, timeout || 0, services.Timer.TYPE_ONE_SHOT); this.timeouts.push(timer); return timer; diff --git a/common/modules/cache.jsm b/common/modules/cache.jsm index ca5d6dd6..25bbdf12 100644 --- a/common/modules/cache.jsm +++ b/common/modules/cache.jsm @@ -138,9 +138,15 @@ var Cache = Module("Cache", XPCOM(Ci.nsIRequestObserver), { } }), - flush: function flush() { - this.storage.clear(); - this.flushDiskCache(); + flush: function flush(filter) { + if (filter) { + this.storage.keys().filter(filter) + .forEach(bind("remove", this.storage)); + } + else { + this.storage.clear(); + this.flushDiskCache(); + } }, flushDiskCache: function flushDiskCache() { diff --git a/common/modules/util.jsm b/common/modules/util.jsm index beab864d..cc7a10e9 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -1366,6 +1366,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), storage.storeForSession("commandlineArgs", args); this.timeout(function () { this.flushCache(); + cache.flush(bind("test", /^literal:/)); this.rehashing = true; let addon = config.addon; addon.userDisabled = true;