From 74e0b06cb64009b5253e8ed54b1e56f1343cb85c Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Tue, 25 Feb 2014 15:17:34 -0500 Subject: [PATCH] engine: Fix closing connection when tick() fails (bz 1069351) (cherry picked from commit ce64d037bff56db994fedd065a9a34b8e827dda2) --- virtManager/engine.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/virtManager/engine.py b/virtManager/engine.py index cef3d20..0e5e15d 100644 --- a/virtManager/engine.py +++ b/virtManager/engine.py @@ -344,30 +344,39 @@ class vmmEngine(vmmGObject): return 1 def _tick_single_conn(self, conn, kwargs): + e = None try: conn.tick(**kwargs) except KeyboardInterrupt: raise - except libvirt.libvirtError, e: - from_remote = getattr(libvirt, "VIR_FROM_REMOTE", None) - from_rpc = getattr(libvirt, "VIR_FROM_RPC", None) - sys_error = getattr(libvirt, "VIR_ERR_SYSTEM_ERROR", None) + except Exception, e: + pass + + if e is None: + return + from_remote = getattr(libvirt, "VIR_FROM_REMOTE", None) + from_rpc = getattr(libvirt, "VIR_FROM_RPC", None) + sys_error = getattr(libvirt, "VIR_ERR_SYSTEM_ERROR", None) + + dom = -1 + code = -1 + if isinstance(e, libvirt.libvirtError): dom = e.get_error_domain() code = e.get_error_code() - if (dom in [from_remote, from_rpc] and - code in [sys_error]): - logging.exception("Could not refresh connection %s", - conn.get_uri()) - logging.debug("Closing connection since libvirtd " - "appears to have stopped") - else: - error_msg = _("Error polling connection '%s': %s") \ - % (conn.get_uri(), e) - self.idle_add(lambda: self.err.show_err(error_msg)) + if (dom in [from_remote, from_rpc] and + code in [sys_error]): + logging.exception("Could not refresh connection %s", + conn.get_uri()) + logging.debug("Closing connection since libvirtd " + "appears to have stopped") + else: + error_msg = _("Error polling connection '%s': %s") \ + % (conn.get_uri(), e) + self.idle_add(lambda: self.err.show_err(error_msg)) - self.idle_add(conn.close) + self.idle_add(conn.close) def increment_window_counter(self, src):