From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49920) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UG9bO-0002kl-3b for qemu-devel@nongnu.org; Thu, 14 Mar 2013 10:57:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UG9bJ-0000VZ-6A for qemu-devel@nongnu.org; Thu, 14 Mar 2013 10:57:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:3057) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UG9bI-0000VO-Rp for qemu-devel@nongnu.org; Thu, 14 Mar 2013 10:57:49 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2EEvl6d016801 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 14 Mar 2013 10:57:48 -0400 From: Kevin Wolf Date: Thu, 14 Mar 2013 15:57:37 +0100 Message-Id: <1363273057-25850-1-git-send-email-kwolf@redhat.com> In-Reply-To: <87a9qg5xjf.fsf@blackfin.pond.sub.org> References: <87a9qg5xjf.fsf@blackfin.pond.sub.org> Subject: [Qemu-devel] [RFC PATCH] qemu-socket: Use local error variable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, lersek@redhat.com, armbru@redhat.com Signed-off-by: Kevin Wolf --- After rebasing this I saw that Anthony already committed a fix that is very close to my v1. I don't intend to actually change that code, but as I've already done this, just for comparison what it would look like with error propagation. Is this what you meant? I find the result more confusing, to be honest. --- util/qemu-sockets.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index 3f12296..f231e9c 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -359,6 +359,7 @@ int inet_connect_opts(QemuOpts *opts, Error **errp, int sock = -1; bool in_progress; ConnectState *connect_state = NULL; + Error *local_err = NULL; res = inet_parse_connect_opts(opts, errp); if (!res) { @@ -373,15 +374,17 @@ int inet_connect_opts(QemuOpts *opts, Error **errp, } for (e = res; e != NULL; e = e->ai_next) { - if (error_is_set(errp)) { - error_free(*errp); - *errp = NULL; - } + + Error *ret_err = NULL; + if (connect_state != NULL) { connect_state->current_addr = e; } - sock = inet_connect_addr(e, &in_progress, connect_state, errp); - if (in_progress) { + sock = inet_connect_addr(e, &in_progress, connect_state, &ret_err); + if (error_is_set(&ret_err)) { + error_propagate(&local_err, ret_err); + } else if (in_progress) { + error_free(local_err); return sock; } else if (sock >= 0) { /* non blocking socket immediate success, call callback */ @@ -393,6 +396,11 @@ int inet_connect_opts(QemuOpts *opts, Error **errp, } g_free(connect_state); freeaddrinfo(res); + if (sock >= 0) { + error_free(local_err); + } else { + error_propagate(errp, local_err); + } return sock; } -- 1.8.1.4