[virt-tools-list] [PATCH virt-viewer 3/9] Move libvirt reconnect polling to VirtViewer

Marc-André Lureau marcandre.lureau at gmail.com
Thu Nov 13 17:20:39 UTC 2014


This is libvirt specific, no need to share it in the VirtViewerApp base
class.
---
 src/virt-viewer-app.c | 35 -----------------------------------
 src/virt-viewer-app.h |  1 -
 src/virt-viewer.c     | 41 +++++++++++++++++++++++++++++++++++++----
 3 files changed, 37 insertions(+), 40 deletions(-)

diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 262d75e..e2d9636 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -127,7 +127,6 @@ struct _VirtViewerAppPrivate {
     gboolean active;
     gboolean connected;
     gboolean cancelled;
-    guint reconnect_poll; /* source id */
     char *unixsock;
     char *guri; /* prefered over ghost:gport */
     char *ghost;
@@ -1322,40 +1321,6 @@ virt_viewer_app_retryauth(gpointer opaque)
     return FALSE;
 }
 
-static gboolean
-virt_viewer_app_connect_timer(void *opaque)
-{
-    VirtViewerApp *self = opaque;
-    VirtViewerAppPrivate *priv = self->priv;
-
-    g_debug("Connect timer fired");
-
-    if (!priv->active &&
-        virt_viewer_app_initial_connect(self, NULL) < 0)
-        gtk_main_quit();
-
-    if (priv->active) {
-        priv->reconnect_poll = 0;
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-void
-virt_viewer_app_start_reconnect_poll(VirtViewerApp *self)
-{
-    g_return_if_fail(VIRT_VIEWER_IS_APP(self));
-    VirtViewerAppPrivate *priv = self->priv;
-
-    g_debug("reconnect_poll: %d", priv->reconnect_poll);
-
-    if (priv->reconnect_poll != 0)
-        return;
-
-    priv->reconnect_poll = g_timeout_add(500, virt_viewer_app_connect_timer, self);
-}
-
 static void
 virt_viewer_app_default_deactivated(VirtViewerApp *self, gboolean connect_error)
 {
diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h
index b68e50c..f127b32 100644
--- a/src/virt-viewer-app.h
+++ b/src/virt-viewer-app.h
@@ -71,7 +71,6 @@ void virt_viewer_app_free_connect_info(VirtViewerApp *self);
 int virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type);
 gboolean virt_viewer_app_activate(VirtViewerApp *self, GError **error);
 gboolean virt_viewer_app_initial_connect(VirtViewerApp *self, GError **error);
-void virt_viewer_app_start_reconnect_poll(VirtViewerApp *self);
 void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level);
 gboolean virt_viewer_app_get_direct(VirtViewerApp *self);
 void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct);
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index dc16b3f..19aa6ed 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -59,6 +59,7 @@ struct _VirtViewerPrivate {
     gboolean waitvm;
     gboolean reconnect;
     gboolean auth_cancelled;
+    guint reconnect_poll; /* source id */
 };
 
 G_DEFINE_TYPE (VirtViewer, virt_viewer, VIRT_VIEWER_TYPE_APP)
@@ -115,6 +116,39 @@ virt_viewer_init(VirtViewer *self)
     self->priv = GET_PRIVATE(self);
 }
 
+static gboolean
+virt_viewer_connect_timer(void *opaque)
+{
+    VirtViewer *self = VIRT_VIEWER(opaque);
+    VirtViewerApp *app = VIRT_VIEWER_APP(self);
+
+    g_debug("Connect timer fired");
+
+    if (!virt_viewer_app_is_active(app) &&
+        !virt_viewer_app_initial_connect(app, NULL))
+        gtk_main_quit();
+
+    if (virt_viewer_app_is_active(app)) {
+        self->priv->reconnect_poll = 0;
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+static void
+virt_viewer_start_reconnect_poll(VirtViewer *self)
+{
+    VirtViewerPrivate *priv = self->priv;
+
+    g_debug("reconnect_poll: %d", priv->reconnect_poll);
+
+    if (priv->reconnect_poll != 0)
+        return;
+
+    priv->reconnect_poll = g_timeout_add(500, virt_viewer_connect_timer, self);
+}
+
 static void
 virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
 {
@@ -129,7 +163,7 @@ virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
     if (priv->reconnect) {
         if (!priv->withEvents) {
             g_debug("No domain events, falling back to polling");
-            virt_viewer_app_start_reconnect_poll(app);
+            virt_viewer_start_reconnect_poll(self);
         }
 
         virt_viewer_app_show_status(app, _("Waiting for guest domain to re-start"));
@@ -512,7 +546,6 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED,
                        void *opaque)
 {
     VirtViewer *self = opaque;
-    VirtViewerApp *app = VIRT_VIEWER_APP(self);
     VirtViewerPrivate *priv = self->priv;
 
     g_debug("Got connection event %d", reason);
@@ -520,7 +553,7 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED,
     virConnectClose(priv->conn);
     priv->conn = NULL;
 
-    virt_viewer_app_start_reconnect_poll(app);
+    virt_viewer_start_reconnect_poll(self);
 }
 
 static void
@@ -831,7 +864,7 @@ virt_viewer_connect(VirtViewerApp *app)
     if (!priv->withEvents &&
         !virt_viewer_app_is_active(app)) {
         g_debug("No domain events, falling back to polling");
-        virt_viewer_app_start_reconnect_poll(app);
+        virt_viewer_start_reconnect_poll(self);
     }
 
     if (virConnectRegisterCloseCallback(priv->conn,
-- 
1.9.3




More information about the virt-tools-list mailing list