From f4365b669acc36bdc61c57d793894305dcb9059a Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Tue, 1 Jul 2014 15:01:58 +0200 Subject: [PATCH] console: prevent access to deleted objects last commits revealed that some objects can still be accessed by registered callbacks after the console is closed. Unregister these callbacks. Signed-off-by: Giuseppe Scrivano --- virtManager/console.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/virtManager/console.py b/virtManager/console.py index 069925dfd..8f828dfbd 100644 --- a/virtManager/console.py +++ b/virtManager/console.py @@ -570,6 +570,7 @@ class SpiceViewer(Viewer): self.display = None self.audio = None self.main_channel = None + self._main_channel_hids = [] self.display_channel = None self.usbdev_manager = None @@ -634,6 +635,11 @@ class SpiceViewer(Viewer): self.display.destroy() self.display = None self.display_channel = None + + for i in self._main_channel_hids: + self.main_channel.handler_disconnect(i) + self._main_channel_hids = [] + self.main_channel = None self.usbdev_manager = None @@ -680,10 +686,12 @@ class SpiceViewer(Viewer): if self.console.tunnels: self.console.tunnels.unlock() self.main_channel = channel - self.main_channel.connect_after("channel-event", + hid = self.main_channel.connect_after("channel-event", self._main_channel_event_cb) - self.main_channel.connect_after("notify::agent-connected", + self._main_channel_hids.append(hid) + hid = self.main_channel.connect_after("notify::agent-connected", self._agent_connected_cb) + self._main_channel_hids.append(hid) elif (type(channel) == SpiceClientGLib.DisplayChannel and not self.display):