From e0381cc9703cdd2f4754ede29da2cdf1e67d04ac Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Tue, 11 Feb 2014 13:27:59 -0500 Subject: [PATCH] connection: Deregister event callbacks on close --- virtManager/connection.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/virtManager/connection.py b/virtManager/connection.py index d2d9a93cb..366c9ef22 100644 --- a/virtManager/connection.py +++ b/virtManager/connection.py @@ -99,7 +99,9 @@ class vmmConnection(vmmGObject): self._nodedev_capable = None self.using_domain_events = False + self._domain_cb_id = None self.using_network_events = False + self._network_cb_id = None self._xml_flags = {} @@ -863,19 +865,21 @@ class vmmConnection(vmmGObject): def _add_conn_events(self): try: - self.get_backend().domainEventRegisterAny(None, - libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE, + self._domain_cb_id = self.get_backend().domainEventRegisterAny( + None, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE, self._domain_lifecycle_event, None) self.using_domain_events = True + logging.debug("Using domain events") except Exception, e: self.using_domain_events = False logging.debug("Error registering domain events: %s", e) try: - self.get_backend().networkEventRegisterAny(None, - libvirt.VIR_NETWORK_EVENT_ID_LIFECYCLE, + self._network_cb_id = self.get_backend().networkEventRegisterAny( + None, libvirt.VIR_NETWORK_EVENT_ID_LIFECYCLE, self._network_lifecycle_event, None) self.using_network_events = True + logging.debug("Using network events") except Exception, e: self.using_network_events = False logging.debug("Error registering network events: %s", e) @@ -920,6 +924,15 @@ class vmmConnection(vmmGObject): for dev in devs.values(): dev.cleanup() + if self._backend: + if self._domain_cb_id is None: + self._backend.domainEventDeregisterAny(self._domain_cb_id) + self._domain_cb_id = None + + if self._network_cb_id is None: + self._backend.networkEventDeregisterAny(self._network_cb_id) + self._network_cb_id = None + self._backend.close() self.record = []