From: Paolo Bonzini <pbonzini@redhat.com>
To: minyard@acm.org, qemu-devel@nongnu.org
Cc: Corey Minyard <cminyard@mvista.com>
Subject: Re: [Qemu-devel] [PATCH 3/3] qemu-sockets: Add error to non-blocking connect handler
Date: Thu, 09 Oct 2014 12:07:42 +0200 [thread overview]
Message-ID: <54365E6E.8030001@redhat.com> (raw)
In-Reply-To: <1412770316-5241-4-git-send-email-minyard@acm.org>
Il 08/10/2014 14:11, minyard@acm.org ha scritto:
> From: Corey Minyard <cminyard@mvista.com>
>
> An error value here would be quite handy and more consistent
> with the rest of the code.
>
> Corey Minyard <cminyard@mvista.com>
> ---
> include/qemu/sockets.h | 2 +-
> migration-tcp.c | 4 ++--
> migration-unix.c | 4 ++--
> qemu-char.c | 6 +++---
> util/qemu-sockets.c | 19 ++++++++++++++-----
> 5 files changed, 22 insertions(+), 13 deletions(-)
>
> diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h
> index fdbb196..f47dae6 100644
> --- a/include/qemu/sockets.h
> +++ b/include/qemu/sockets.h
> @@ -47,7 +47,7 @@ int recv_all(int fd, void *buf, int len1, bool single_read);
> /* callback function for nonblocking connect
> * valid fd on success, negative error code on failure
> */
> -typedef void NonBlockingConnectHandler(int fd, void *opaque);
> +typedef void NonBlockingConnectHandler(int fd, Error *errp, void *opaque);
>
> InetSocketAddress *inet_parse(const char *str, Error **errp);
> int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp);
> diff --git a/migration-tcp.c b/migration-tcp.c
> index 2e34517..91c9cf3 100644
> --- a/migration-tcp.c
> +++ b/migration-tcp.c
> @@ -33,12 +33,12 @@
> do { } while (0)
> #endif
>
> -static void tcp_wait_for_connect(int fd, void *opaque)
> +static void tcp_wait_for_connect(int fd, Error *err, void *opaque)
> {
> MigrationState *s = opaque;
>
> if (fd < 0) {
> - DPRINTF("migrate connect error\n");
> + DPRINTF("migrate connect error: %s\n", error_get_pretty(err));
> s->file = NULL;
> migrate_fd_error(s);
> } else {
> diff --git a/migration-unix.c b/migration-unix.c
> index 0a5f8a1..1cdadfb 100644
> --- a/migration-unix.c
> +++ b/migration-unix.c
> @@ -33,12 +33,12 @@
> do { } while (0)
> #endif
>
> -static void unix_wait_for_connect(int fd, void *opaque)
> +static void unix_wait_for_connect(int fd, Error *err, void *opaque)
> {
> MigrationState *s = opaque;
>
> if (fd < 0) {
> - DPRINTF("migrate connect error\n");
> + DPRINTF("migrate connect error: %s\n", error_get_pretty(err));
> s->file = NULL;
> migrate_fd_error(s);
> } else {
> diff --git a/qemu-char.c b/qemu-char.c
> index 83ff458..8f3af06 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -3061,14 +3061,14 @@ static void qemu_chr_finish_socket_connection(CharDriverState *chr, int fd)
> }
> }
>
> -static void qemu_chr_socket_connected(int fd, void *opaque)
> +static void qemu_chr_socket_connected(int fd, Error *err, void *opaque)
> {
> CharDriverState *chr = opaque;
> TCPCharDriver *s = chr->opaque;
>
> if (fd < 0) {
> - check_report_connect_error(chr, "Unable to connect to socket %s",
> - chr->label);
> + check_report_connect_error(chr, "Unable to connect to socket %s: %s",
> + chr->label, error_get_pretty(err));
> return;
> }
>
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index 1eef590..e6a9644 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -234,6 +234,7 @@ static void wait_for_connect(void *opaque)
> int val = 0, rc = 0;
> socklen_t valsize = sizeof(val);
> bool in_progress;
> + Error *err = NULL;
>
> qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
>
> @@ -248,6 +249,7 @@ static void wait_for_connect(void *opaque)
>
> /* connect error */
> if (rc < 0) {
> + error_setg_errno(&err, errno, "Error connecting to socket");
> closesocket(s->fd);
> s->fd = rc;
> }
This is missing above this hunk:
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index e6a9644..a76bb3c 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -245,6 +245,7 @@ static void wait_for_connect(void *opaque)
/* update rc to contain error */
if (!rc && val) {
rc = -1;
+ errno = val;
}
/* connect error */
> @@ -257,9 +259,14 @@ static void wait_for_connect(void *opaque)
> while (s->current_addr->ai_next != NULL && s->fd < 0) {
> s->current_addr = s->current_addr->ai_next;
> s->fd = inet_connect_addr(s->current_addr, &in_progress, s, NULL);
> + if (s->fd < 0) {
> + error_free(err);
> + err = NULL;
> + error_setg_errno(&err, errno, "Unable to start socket connect");
> + }
> /* connect in progress */
> if (in_progress) {
> - return;
> + goto out;
> }
> }
>
> @@ -267,9 +274,11 @@ static void wait_for_connect(void *opaque)
> }
>
> if (s->callback) {
> - s->callback(s->fd, s->opaque);
> + s->callback(s->fd, err, s->opaque);
> }
> g_free(s);
> +out:
> + error_free(err);
> }
>
> static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,
> @@ -401,7 +410,7 @@ int inet_connect_opts(QemuOpts *opts, Error **errp,
> return sock;
> } else {
> if (callback) {
> - callback(sock, opaque);
> + callback(sock, NULL, opaque);
> }
> }
> g_free(connect_state);
> @@ -769,7 +778,7 @@ int unix_connect_opts(QemuOpts *opts, Error **errp,
> } else if (rc >= 0) {
> /* non blocking socket immediate success, call callback */
> if (callback != NULL) {
> - callback(sock, opaque);
> + callback(sock, NULL, opaque);
> }
> }
>
> @@ -919,7 +928,7 @@ int socket_connect(SocketAddress *addr, Error **errp,
> fd = monitor_get_fd(cur_mon, addr->fd->str, errp);
> if (fd >= 0 && callback) {
> qemu_set_nonblock(fd);
> - callback(fd, opaque);
> + callback(fd, NULL, opaque);
> }
> break;
>
>
next prev parent reply other threads:[~2014-10-09 10:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-08 12:11 [Qemu-devel] [PATCH v2 0/3] Clean up non-blocking error reporting minyard
2014-10-08 12:11 ` [Qemu-devel] [PATCH 1/3] qemu-error: Add error_vreport() minyard
2014-10-08 14:38 ` Eric Blake
2014-10-08 12:11 ` [Qemu-devel] [PATCH 2/3] qemu-char: Fix reconnect socket error reporting minyard
2014-10-08 12:11 ` [Qemu-devel] [PATCH 3/3] qemu-sockets: Add error to non-blocking connect handler minyard
2014-10-09 10:07 ` Paolo Bonzini [this message]
2014-10-09 17:48 ` Corey Minyard
2014-10-08 12:56 ` [Qemu-devel] [PATCH v2 0/3] Clean up non-blocking error reporting Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54365E6E.8030001@redhat.com \
--to=pbonzini@redhat.com \
--cc=cminyard@mvista.com \
--cc=minyard@acm.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.