From 8b0e846e0ef388c5d65189f625a6f01a6c9a33da Mon Sep 17 00:00:00 2001 From: Adel Gadllah Date: Wed, 2 Oct 2013 15:29:30 +0200 Subject: [PATCH] background: Disconnect settings signal handler on destroy We connect to the changed signal in _init() but never actually disconnect from it. The callback has a reference to "this" which results into the background object not getting garbage collected. Fix that leaks by disconnecting in _destroy() https://bugzilla.gnome.org/show_bug.cgi?id=709263 --- js/ui/background.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/js/ui/background.js b/js/ui/background.js index 246060a88..41e67fe31 100644 --- a/js/ui/background.js +++ b/js/ui/background.js @@ -319,9 +319,9 @@ const Background = new Lang.Class({ this._cancellable = new Gio.Cancellable(); this.isLoaded = false; - this._settings.connect('changed', Lang.bind(this, function() { - this.emit('changed'); - })); + this._settingsChangedSignalId = this._settings.connect('changed', Lang.bind(this, function() { + this.emit('changed'); + })); this._load(); }, @@ -362,6 +362,10 @@ const Background = new Lang.Class({ this.actor.disconnect(this._destroySignalId); this._destroySignalId = 0; + + if (this._settingsChangedSignalId != 0) + this._settings.disconnect(this._settingsChangedSignalId); + this._settingsChangedSignalId = 0; }, _setLoaded: function() {