Move libvirt reconnect polling to VirtViewer

This is libvirt specific, no need to share it in the VirtViewerApp base
class.
This commit is contained in:
Marc-André Lureau 2014-11-12 12:32:07 +01:00
parent dbbd72676a
commit 5a444f106d
3 changed files with 37 additions and 40 deletions

View File

@ -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;
@ -1325,40 +1324,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))
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)
{

View File

@ -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);

View File

@ -59,6 +59,7 @@ struct _VirtViewerPrivate {
gboolean reconnect;
gboolean auth_cancelled;
gint domain_event;
guint reconnect_poll; /* source id */
};
G_DEFINE_TYPE (VirtViewer, virt_viewer, VIRT_VIEWER_TYPE_APP)
@ -116,6 +117,39 @@ virt_viewer_init(VirtViewer *self)
self->priv->domain_event = -1;
}
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)
{
@ -130,7 +164,7 @@ virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error)
if (priv->reconnect) {
if (priv->domain_event < 0) {
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"));
@ -513,7 +547,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);
@ -521,7 +554,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
@ -836,7 +869,7 @@ virt_viewer_connect(VirtViewerApp *app)
if (priv->domain_event < 0 &&
!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,