commit 6f86d85f89dca399c17dd0ccbc9fb03ebcff4a81
parent 2fd887199849412b492e363112bc927d9a1247fa
Author: Simon Kornblith <simon@simonster.com>
Date: Wed, 25 Jul 2012 21:44:08 -0400
Revert "Fix ReferenceError: timer is not defined from 0a9fad41246f098c3dad1cc72bdaaf634350e371"
This reverts commit 99e5bce87c7c42c468fd7061dc36dbe0d89c5e5c.
Diffstat:
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js
@@ -183,9 +183,15 @@ Components.utils.import("resource://gre/modules/Services.jsm");
var _waitingForDBLock = false;
/**
- * Maintains callbacks to be called when Zotero.wait() completes
+ * Maintains nsITimers to be used when Zotero.wait() completes (to reduce performance penalty
+ * of initializing new objects)
*/
- var _waitCallbacks = [];
+ var _waitTimers = [];
+
+ /**
+ * Maintains nsITimerCallbacks to be used when Zotero.wait() completes
+ */
+ var _waitTimerCallbacks = [];
/**
* Maintains running nsITimers in global scope, so that they don't disappear randomly
@@ -1447,9 +1453,12 @@ Components.utils.import("resource://gre/modules/Services.jsm");
_waiting--;
- // requeue callbacks that came up during Zotero.wait() but couldn't execute
- for(var i in _waitCallbacks) Zotero.setTimeout(_waitCallbacks[i], 0);
- _waitCallbacks = [];
+ // requeue nsITimerCallbacks that came up during Zotero.wait() but couldn't execute
+ for(var i in _waitTimers) {
+ _waitTimers[i].initWithCallback(_waitTimerCallbacks[i], 0, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
+ }
+ _waitTimers = [];
+ _waitTimerCallbacks = [];
//Zotero.debug("Waited " + cycles + " cycles");
return;
@@ -1481,9 +1490,12 @@ Components.utils.import("resource://gre/modules/Services.jsm");
win.clearInterval(intervalID);
- // requeue callbacks that came up during generator pumping but couldn't execute
- for(var i in _waitCallbacks) Zotero.setTimeout(_waitCallbacks[i], 0);
- _waitCallbacks = [];
+ // requeue nsITimerCallbacks that came up during generator pumping but couldn't execute
+ for(var i in _waitTimers) {
+ _waitTimers[i].initWithCallback(_waitTimerCallbacks[i], 0, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
+ }
+ _waitTimers = [];
+ _waitTimerCallbacks = [];
if(err) {
if(errorHandler) {
@@ -1518,17 +1530,17 @@ Components.utils.import("resource://gre/modules/Services.jsm");
* is executing
*/
this.setTimeout = function(func, ms, runWhenWaiting) {
- var callback = function() {
+ Services.appShell.hiddenDOMWindow.setTimeout(function() {
if(_waiting && !runWhenWaiting) {
// if our callback gets called during Zotero.wait(), queue it to be set again
// when Zotero.wait() completes
- _waitCallbacks.push(callback);
+ _waitTimers.push(timer);
+ _waitTimerCallbacks.push(timerCallback);
} else {
// execute callback function
func();
}
- };
- Services.appShell.hiddenDOMWindow.setTimeout(callback, ms);
+ }, ms);
}
/**