From 8c0a2a128490f33a6011ad521307e93107047810 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 b571e4c6b..36f8d36f9 100644 --- a/js/ui/calendar.js +++ b/js/ui/calendar.js @@ -1229,7 +1229,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(); @@ -1260,6 +1260,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; } });