mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
engine: Clean up some object lifecycle leaks
pygobject doesn't seem to choke on debug_leak_check anymore, so we can use it to find object leaks. just doing a few for now since it's generally not a big deal.
This commit is contained in:
parent
b6111b5e85
commit
a91137dbdd
@ -869,6 +869,13 @@ class vmmConnection(vmmGObject):
|
|||||||
def _cleanup(self):
|
def _cleanup(self):
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
|
self._objects = None
|
||||||
|
self._backend.cb_fetch_all_guests = None
|
||||||
|
self._backend.cb_fetch_all_pools = None
|
||||||
|
self._backend.cb_fetch_all_nodedevs = None
|
||||||
|
self._backend.cb_fetch_all_vols = None
|
||||||
|
self._backend.cb_clear_cache = None
|
||||||
|
|
||||||
def open(self):
|
def open(self):
|
||||||
if not self.is_disconnected():
|
if not self.is_disconnected():
|
||||||
return
|
return
|
||||||
|
@ -45,8 +45,13 @@ from .error import vmmErrorDialog
|
|||||||
from .systray import vmmSystray
|
from .systray import vmmSystray
|
||||||
from .delete import vmmDeleteDialog
|
from .delete import vmmDeleteDialog
|
||||||
|
|
||||||
# Enable this to get a report of leaked objects on app shutdown
|
# Enabling this will tell us, at app exit time, which vmmGObjects were not
|
||||||
# gtk3/pygobject has issues here as of Fedora 18
|
# garbage collected. This is caused by circular references to other objects,
|
||||||
|
# like a signal that wasn't disconnected. It's not a big deal, but if we
|
||||||
|
# have objects that can be created and destroyed a lot over the course of
|
||||||
|
# the app lifecycle, every non-garbage collected class is a memory leak.
|
||||||
|
# So it's nice to poke at this every now and then and try to track down
|
||||||
|
# what we need to add to class _cleanup handling.
|
||||||
debug_ref_leaks = False
|
debug_ref_leaks = False
|
||||||
|
|
||||||
DETAILS_PERF = 1
|
DETAILS_PERF = 1
|
||||||
@ -147,7 +152,7 @@ class vmmEngine(vmmGObject):
|
|||||||
if self.systray:
|
if self.systray:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.systray = vmmSystray(self)
|
self.systray = vmmSystray()
|
||||||
self.systray.connect("action-toggle-manager", self._do_toggle_manager)
|
self.systray.connect("action-toggle-manager", self._do_toggle_manager)
|
||||||
self.systray.connect("action-suspend-domain", self._do_suspend_domain)
|
self.systray.connect("action-suspend-domain", self._do_suspend_domain)
|
||||||
self.systray.connect("action-resume-domain", self._do_resume_domain)
|
self.systray.connect("action-resume-domain", self._do_resume_domain)
|
||||||
@ -163,6 +168,10 @@ class vmmEngine(vmmGObject):
|
|||||||
self.systray.connect("action-clone-domain", self._do_show_clone)
|
self.systray.connect("action-clone-domain", self._do_show_clone)
|
||||||
self.systray.connect("action-exit-app", self.exit_app)
|
self.systray.connect("action-exit-app", self.exit_app)
|
||||||
|
|
||||||
|
self.connect("conn-added", self.systray.conn_added)
|
||||||
|
self.connect("conn-removed", self.systray.conn_removed)
|
||||||
|
|
||||||
|
|
||||||
def system_tray_changed(self, *ignore):
|
def system_tray_changed(self, *ignore):
|
||||||
systray_enabled = self.config.get_view_system_tray()
|
systray_enabled = self.config.get_view_system_tray()
|
||||||
if self.windows == 0 and not systray_enabled:
|
if self.windows == 0 and not systray_enabled:
|
||||||
@ -347,6 +356,8 @@ class vmmEngine(vmmGObject):
|
|||||||
% (conn.get_uri(), e))
|
% (conn.get_uri(), e))
|
||||||
self.idle_add(self._handle_tick_error, error_msg, tb)
|
self.idle_add(self._handle_tick_error, error_msg, tb)
|
||||||
|
|
||||||
|
# Need to clear reference to make leak check happy
|
||||||
|
conn = None
|
||||||
self._tick_queue.task_done()
|
self._tick_queue.task_done()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ class vmmSystray(vmmGObject):
|
|||||||
"action-exit-app": (GObject.SignalFlags.RUN_FIRST, None, []),
|
"action-exit-app": (GObject.SignalFlags.RUN_FIRST, None, []),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, engine):
|
def __init__(self):
|
||||||
vmmGObject.__init__(self)
|
vmmGObject.__init__(self)
|
||||||
|
|
||||||
self.topwin = None
|
self.topwin = None
|
||||||
@ -66,9 +66,6 @@ class vmmSystray(vmmGObject):
|
|||||||
self.systray_icon = None
|
self.systray_icon = None
|
||||||
self.systray_indicator = False
|
self.systray_indicator = False
|
||||||
|
|
||||||
engine.connect("conn-added", self.conn_added)
|
|
||||||
engine.connect("conn-removed", self.conn_removed)
|
|
||||||
|
|
||||||
# Are we using Application Indicators?
|
# Are we using Application Indicators?
|
||||||
if AppIndicator3 is not None:
|
if AppIndicator3 is not None:
|
||||||
self.systray_indicator = True
|
self.systray_indicator = True
|
||||||
@ -97,8 +94,14 @@ class vmmSystray(vmmGObject):
|
|||||||
self.systray_menu = None
|
self.systray_menu = None
|
||||||
|
|
||||||
self.systray_icon = None
|
self.systray_icon = None
|
||||||
|
self.conn_menuitems = None
|
||||||
|
self.conn_vm_menuitems = None
|
||||||
|
self.vm_action_dict = None
|
||||||
|
|
||||||
# Initialization routines
|
|
||||||
|
###########################
|
||||||
|
# Initialization routines #
|
||||||
|
###########################
|
||||||
|
|
||||||
def init_systray_menu(self):
|
def init_systray_menu(self):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user