Blob Blame History Raw
From 74e0b06cb64009b5253e8ed54b1e56f1343cb85c Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
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):