[Pkg-mozext-commits] [firetray] 343/399: keep long living references to timers

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:24:10 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch dfsg-clean
in repository firetray.

commit a7c753e5b3034b6050604b5b20bbe931af41e6a3
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Sun Mar 10 17:29:32 2013 +0100

    keep long living references to timers
---
 src/modules/FiretrayHandler.jsm   |   69 ++++++++++++++++++++-----------------
 src/modules/FiretrayMessaging.jsm |    1 -
 src/modules/commons.js            |    5 +++
 3 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index b6f2ce4..dd36bb9 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -31,6 +31,7 @@ let log = firetray.Logging.getLogger("firetray.Handler");
 firetray.Handler = {
 
   initialized: false,
+  timers: {},
   inBrowserApp: false,
   inMailApp: false,
   appHasChat: false,
@@ -106,7 +107,9 @@ firetray.Handler = {
       }
     }
 
-    if (this.isChatEnabled()) {
+    let chatIsEnabled = this.isChatEnabled();
+    log.info('isChatEnabled='+chatIsEnabled);
+    if (chatIsEnabled) {
       Cu.import("resource://firetray/FiretrayMessaging.jsm"); // needed for existsChatAccount
       Cu.import("resource://firetray/FiretrayChat.jsm");
       firetray.Utils.addObservers(firetray.Handler, [
@@ -145,11 +148,9 @@ firetray.Handler = {
   },
 
   isChatEnabled: function() {
-    let chatIsEnabled = (this.appHasChat &&
-                         Services.prefs.getBoolPref("mail.chat.enabled") &&
-                         firetray.Utils.prefService.getBoolPref("chat_icon_enable"));
-    log.info('isChatEnabled='+chatIsEnabled);
-    return chatIsEnabled;
+    return this.appHasChat &&
+      Services.prefs.getBoolPref("mail.chat.enabled") &&
+      firetray.Utils.prefService.getBoolPref("chat_icon_enable");
   },
 
   tryCloseLibs: function() {
@@ -192,16 +193,17 @@ firetray.Handler = {
     case "before-first-paint":
       log.debug("before-first-paint: "+subject.baseURI);
       firetray.Utils.removeObservers(firetray.Handler, [ "before-first-paint" ]);
-      firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
-        Ci.nsITimer.TYPE_ONE_SHOT, function() {
-          if (firetray.Utils.prefService.getBoolPref('start_hidden')) {
-            log.debug("start_hidden");
-            firetray.Handler.hideAllWindows();
-          }
-
-          firetray.Handler.appStarted = true;
-          log.debug("*** appStarted ***");
-        });
+      firetray.Handler.timers['before-first-paint'] =
+        firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
+          Ci.nsITimer.TYPE_ONE_SHOT, function() {
+            if (firetray.Utils.prefService.getBoolPref('start_hidden')) {
+              log.debug("start_hidden");
+              firetray.Handler.hideAllWindows();
+            }
+
+            firetray.Handler.appStarted = true;
+            log.debug("*** appStarted ***");
+          });
       break;
 
     case "xpcom-will-shutdown":
@@ -327,11 +329,12 @@ firetray.Handler = {
 
       // FIXME: obviously we need to wait to avoid seg fault on jsapi.cpp:827
       // 827         if (t->data.requestDepth) {
-      firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
-        Ci.nsITimer.TYPE_ONE_SHOT, function() {
-          for(var key in firetray.Handler.windows) break;
-          firetray.Handler.windows[key].chromeWin.open(home);
-        });
+      firetray.Handler.timers['open-browser-window'] =
+        firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
+          Ci.nsITimer.TYPE_ONE_SHOT, function() {
+            for(var key in firetray.Handler.windows) break;
+            firetray.Handler.windows[key].chromeWin.open(home);
+          });
     } catch (x) { log.error(x); }
   },
 
@@ -346,12 +349,13 @@ firetray.Handler = {
 
   quitApplication: function() {
     try {
-      firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
-        Ci.nsITimer.TYPE_ONE_SHOT, function() {
-          let appStartup = Cc['@mozilla.org/toolkit/app-startup;1']
-                .getService(Ci.nsIAppStartup);
-          appStartup.quit(Ci.nsIAppStartup.eAttemptQuit);
-        });
+      firetray.Handler.timers['quit-application'] =
+        firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
+          Ci.nsITimer.TYPE_ONE_SHOT, function() {
+            let appStartup = Cc['@mozilla.org/toolkit/app-startup;1']
+                  .getService(Ci.nsIAppStartup);
+            appStartup.quit(Ci.nsIAppStartup.eAttemptQuit);
+          });
     } catch (x) { log.error(x); }
   },
 
@@ -467,11 +471,12 @@ firetray.VersionChangeHandler = {
     }
 
     if (tabmail) {
-      firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
-        Ci.nsITimer.TYPE_ONE_SHOT, function() {
-          log.debug("openMailTab");
-          tabmail.openTab("contentTab", {contentPage: url});
-        });
+      firetray.Handler.timers['open-mail-tab'] =
+        firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
+          Ci.nsITimer.TYPE_ONE_SHOT, function() {
+            log.debug("openMailTab");
+            tabmail.openTab("contentTab", {contentPage: url});
+          });
     }
   },
 
diff --git a/src/modules/FiretrayMessaging.jsm b/src/modules/FiretrayMessaging.jsm
index 5ee47a1..a1d3ee1 100644
--- a/src/modules/FiretrayMessaging.jsm
+++ b/src/modules/FiretrayMessaging.jsm
@@ -27,7 +27,6 @@ let log = firetray.Logging.getLogger("firetray.Messaging");
 
 firetray.Messaging = {
   initialized: false,
-  cleaningTimer: null,
   currentMsgCount: null,
   newMsgCount: null,
   observedTopics: {},
diff --git a/src/modules/commons.js b/src/modules/commons.js
index c0637c7..07b939a 100644
--- a/src/modules/commons.js
+++ b/src/modules/commons.js
@@ -225,6 +225,11 @@ firetray.Utils = {
     return list;
   },
 
+  /*
+   * keep a long-living reference to the returned timer, if you don't want to
+   * see it GC'ed ! see
+   * http://www.joshmatthews.net/blog/2011/03/nsitimer-anti-pattern/
+   */
   timer: function(delay, timerType, callback) {
     var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
     timer.initWithCallback({ notify: callback },

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firetray.git



More information about the Pkg-mozext-commits mailing list