From b76efe17d6049693374053d60bd7c358f6a0d83c Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 25 Aug 2011 09:20:00 -0400 Subject: [PATCH] notificationDaemon: Work around JS interpreter bug The "id" variable was being sporadically reset to null, and as far as Florian and I could determine, this is actually a Spidermonkey bug. The issue has something to do with: 1) use of "let" for the variable 2) Nesting a dynamic closure inside of a for() loop Work around it here for now - I tried to create a minimized test case to hand to the Spidermonkey developers, but failed. A big part of the problem is it's only sporadically reproducible. --- js/ui/notificationDaemon.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js index 86bd4a27b..915808fcb 100644 --- a/js/ui/notificationDaemon.js +++ b/js/ui/notificationDaemon.js @@ -305,7 +305,7 @@ NotificationDaemon.prototype = { ndata.notification = notification; notification.connect('destroy', Lang.bind(this, function(n, reason) { - delete this._notifications[id]; + delete this._notifications[ndata.id]; let notificationClosedReason; switch (reason) { case MessageTray.NotificationDestroyedReason.EXPIRED: @@ -318,11 +318,11 @@ NotificationDaemon.prototype = { notificationClosedReason = NotificationClosedReason.APP_CLOSED; break; } - this._emitNotificationClosed(id, notificationClosedReason); + this._emitNotificationClosed(ndata.id, notificationClosedReason); })); notification.connect('action-invoked', Lang.bind(this, function(n, actionId) { - this._emitActionInvoked(id, actionId); + this._emitActionInvoked(ndata.id, actionId); })); } else { notification.update(summary, body, { icon: iconActor, @@ -336,7 +336,7 @@ NotificationDaemon.prototype = { if (actions[i] == 'default') notification.connect('clicked', Lang.bind(this, function() { - this._emitActionInvoked(id, "default"); + this._emitActionInvoked(ndata.id, "default"); })); else notification.addButton(actions[i], actions[i + 1]);