[virt-tools-list] [virt-viewer][PATCH 1/7 v3] virt-viewer: Add a GError arg to extract_connect_info()
Christophe Fergeau
cfergeau at redhat.com
Fri Mar 27 09:32:21 UTC 2015
Hey,
On Thu, Mar 26, 2015 at 11:26:54PM +0100, Fabiano Fidêncio wrote:
> This is part of a small re-factoring that will have all connection
> errors, when we won't be able to connect regardless of what changes on
> the remote host, being treated by virt_viewer_app_initial_connect(),
> avoiding weird behaviors as we have nowadays (like more than one error
> dialog being shown or having the virt-viewer waiting forever for a guest
> that will never show up).
>
> Related: rhbz#1085216
> ---
> src/virt-viewer.c | 25 +++++++++++++++++++++++--
> 1 file changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/src/virt-viewer.c b/src/virt-viewer.c
> index 994ee28..1c9f59d 100644
> --- a/src/virt-viewer.c
> +++ b/src/virt-viewer.c
> @@ -387,7 +387,8 @@ virt_viewer_is_reachable(const gchar *host,
>
> static gboolean
> virt_viewer_extract_connect_info(VirtViewer *self,
> - virDomainPtr dom)
> + virDomainPtr dom,
> + GError **error)
> {
> char *type = NULL;
> char *xpath = NULL;
> @@ -405,12 +406,18 @@ virt_viewer_extract_connect_info(VirtViewer *self,
> gint port = 0;
> gchar *uri = NULL;
> gboolean direct = virt_viewer_app_get_direct(app);
> + GError *err = NULL;
Looks good, you probably don't need this intermediate local variable,
you could use 'error' directly throughout this function.
Christophe
>
> virt_viewer_app_free_connect_info(app);
>
> if ((type = virt_viewer_extract_xpath_string(xmldesc, "string(/domain/devices/graphics/@type)")) == NULL) {
> + g_set_error(&err,
> + VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_FAILED,
> + _("Cannot determine the graphic type for the guest %s"), priv->domkey);
> +
> virt_viewer_app_simple_message_dialog(app, _("Cannot determine the graphic type for the guest %s"),
> priv->domkey);
> +
> goto cleanup;
> }
>
> @@ -446,8 +453,13 @@ virt_viewer_extract_connect_info(VirtViewer *self,
>
> uri = virConnectGetURI(priv->conn);
> if (virt_viewer_util_extract_host(uri, NULL, &host, &transport, &user, &port) < 0) {
> + g_set_error(&err,
> + VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_FAILED,
> + _("Cannot determine the host for the guest %s"), priv->domkey);
> +
> virt_viewer_app_simple_message_dialog(app, _("Cannot determine the host for the guest %s"),
> priv->domkey);
> +
> goto cleanup;
> }
>
> @@ -472,10 +484,16 @@ virt_viewer_extract_connect_info(VirtViewer *self,
> }
>
> if (!virt_viewer_is_reachable(ghost, transport, host, direct)) {
> + g_set_error(&err,
> + VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_FAILED,
> + _("Guest '%s' is not reachable"), priv->domkey);
> +
> g_debug("graphics listen '%s' is not reachable from this machine",
> ghost ? ghost : "");
> +
> virt_viewer_app_simple_message_dialog(app, _("Guest '%s' is not reachable"),
> priv->domkey);
> +
> goto cleanup;
> }
>
> @@ -484,6 +502,9 @@ virt_viewer_extract_connect_info(VirtViewer *self,
> retval = TRUE;
>
> cleanup:
> + if (err)
> + g_propagate_error(error, err);
> +
> g_free(gport);
> g_free(gtlsport);
> g_free(ghost);
> @@ -515,7 +536,7 @@ virt_viewer_update_display(VirtViewer *self, virDomainPtr dom)
> g_object_set(app, "guest-name", virDomainGetName(dom), NULL);
>
> if (!virt_viewer_app_has_session(app)) {
> - if (!virt_viewer_extract_connect_info(self, dom))
> + if (!virt_viewer_extract_connect_info(self, dom, NULL))
> return FALSE;
> }
>
> --
> 2.3.3
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20150327/f33d1f01/attachment.sig>
More information about the virt-tools-list
mailing list