[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