[polari/wip/fmuellner/invalid-object-access: 5/8] roomListRow:	Disconnect room signals
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc: 
- Subject: [polari/wip/fmuellner/invalid-object-access: 5/8] roomListRow:	Disconnect room signals
- Date: Sat,  9 Dec 2017 21:16:21 +0000 (UTC)
commit d4ed3a1c72c0378e3a2062b4be3267478d171da4
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Dec 6 00:37:30 2017 +0100
    roomListRow: Disconnect room signals
    
    Room list rows are destroyed from a ::room-removed handler, which means
    it has a slightly shorter life time than the corresponding room; without
    disconnecting
 src/roomList.js | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/src/roomList.js b/src/roomList.js
index 6635b67..514636c 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -34,20 +34,26 @@ var RoomRow = GObject.registerClass({
                                this._onButtonRelease.bind(this));
         this.connect('key-press-event', this._onKeyPress.bind(this));
 
-        room.connect('notify::channel', this._onChannelChanged.bind(this));
         room.bind_property('display-name', this._roomLabel, 'label',
                            GObject.BindingFlags.SYNC_CREATE);
 
+        let channelChangedId =
+            room.connect('notify::channel', this._onChannelChanged.bind(this));
+
+        let connectionStatusChangedId = 0;
+
         if (this._room.type == Tp.HandleType.ROOM) {
-            let connectionStatusChangedId =
+            connectionStatusChangedId =
                 this.account.connect('notify::connection-status',
                                      this._onConnectionStatusChanged.bind(this));
             this._onConnectionStatusChanged();
+        }
 
-            this.connect('destroy', () => {
+        this.connect('destroy', () => {
+            room.disconnect(channelChangedId);
+            if (connectionStatusChangedId)
                 this.account.disconnect(connectionStatusChangedId);
-            });
-        }
+        });
 
         this._updatePending();
         this._onChannelChanged();
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]