From 409f6718b88400c62fa63a66692e42cbce03e790 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 22 Sep 2015 17:27:56 +0200 Subject: [PATCH] calendar: Disconnect all Notification signals on NotificationMessage destruction The destroy signal handler is kept connected despite the NotificationMessage being destroyed, which leaves dangling NotificationMessage objects that will be mass destroyed when the Notification object these depend upon is finally destroyed. Depending on the amount of accumulated NotificationMessages, this may lead to temporary freezes or other more funky issues when recursion limits are hit. https://bugzilla.gnome.org/show_bug.cgi?id=755425 --- js/ui/calendar.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/js/ui/calendar.js b/js/ui/calendar.js index b61424fc8..056d6e2ca 100644 --- a/js/ui/calendar.js +++ b/js/ui/calendar.js @@ -1230,7 +1230,7 @@ const NotificationMessage = new Lang.Class({ this._closed = true; this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED); })); - notification.connect('destroy', Lang.bind(this, + this._destroyId = notification.connect('destroy', Lang.bind(this, function() { if (!this._closed) this.close(); @@ -1262,6 +1262,10 @@ const NotificationMessage = new Lang.Class({ if (this._updatedId) this.notification.disconnect(this._updatedId); this._updatedId = 0; + + if (this._destroyId) + this.notification.disconnect(this._destroyId); + this._destroyId = 0; } });