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
This commit is contained in:
Carlos Garnacho 2015-09-22 17:27:56 +02:00
parent 9c0e179080
commit 409f6718b8

View File

@ -1230,7 +1230,7 @@ const NotificationMessage = new Lang.Class({
this._closed = true; this._closed = true;
this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED); this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
})); }));
notification.connect('destroy', Lang.bind(this, this._destroyId = notification.connect('destroy', Lang.bind(this,
function() { function() {
if (!this._closed) if (!this._closed)
this.close(); this.close();
@ -1262,6 +1262,10 @@ const NotificationMessage = new Lang.Class({
if (this._updatedId) if (this._updatedId)
this.notification.disconnect(this._updatedId); this.notification.disconnect(this._updatedId);
this._updatedId = 0; this._updatedId = 0;
if (this._destroyId)
this.notification.disconnect(this._destroyId);
this._destroyId = 0;
} }
}); });