From patchwork Fri Oct 19 13:31:57 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 192713 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 7A9862C008E for ; Sat, 20 Oct 2012 01:10:07 +1100 (EST) Received: from localhost ([::1]:43508 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TPDH1-00020M-T8 for incoming@patchwork.ozlabs.org; Fri, 19 Oct 2012 10:10:03 -0400 Received: from eggs.gnu.org ([208.118.235.92]:46932) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TPCi4-0006pE-9Y for qemu-devel@nongnu.org; Fri, 19 Oct 2012 09:34:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TPChy-0006di-Cz for qemu-devel@nongnu.org; Fri, 19 Oct 2012 09:33:56 -0400 Received: from mail-pa0-f45.google.com ([209.85.220.45]:59837) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TPChy-0005yp-6U for qemu-devel@nongnu.org; Fri, 19 Oct 2012 09:33:50 -0400 Received: by mail-pa0-f45.google.com with SMTP id fb10so369528pad.4 for ; Fri, 19 Oct 2012 06:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:subject:date:message-id:x-mailer:in-reply-to :references; bh=pqCV4X1kn0xfdp/Ff0Abbx9CHX9/48nbvxgHAhR7ogk=; b=UxpnBYqNVrOPAAT3u+DvF9ifMCwJtUjfc1bhBwin6IeSttm2uZqQzgNG6RbF9YmJvD Ufsis2iAlJ64Nn2C9ST9oWTMunTmY0Zm8TPOskzbJCDAOXXekDL5m4zuqGWh/PwSBPtJ 6XGlOttrsRFMg800yEnYUWXlIIEyV0tV0bDIM/3ug0gveg/hZDPmxsVRiGncWvS1DX0c zGZLralgNg3Q/lqsfiAzFI0WbyMzHtlJr/oH59NxpF1aUabc3U8lXWuJ1y5VH9ftqazH Tcsr2/j0c19eIz8wfUaPPZieHsDgSJeUlMdyQwKJbn4LezF0aTOIYsoMWxH/Td41/cyn f62g== Received: by 10.66.77.40 with SMTP id p8mr3754283paw.78.1350653629858; Fri, 19 Oct 2012 06:33:49 -0700 (PDT) Received: from yakj.usersys.redhat.com (93-34-169-1.ip50.fastwebnet.it. [93.34.169.1]) by mx.google.com with ESMTPS id kr4sm1240726pbc.76.2012.10.19.06.33.44 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 19 Oct 2012 06:33:47 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 19 Oct 2012 15:31:57 +0200 Message-Id: <1350653528-5834-19-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.12.1 In-Reply-To: <1350653528-5834-1-git-send-email-pbonzini@redhat.com> References: <1350653528-5834-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.220.45 Subject: [Qemu-devel] [PATCH 18/29] qemu-sockets: add error propagation to inet_connect_addr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org perror and fprintf can be removed because all clients can now consume Errors properly. However, we'll need to change the non-blocking connect handlers to take an Error, in order to improve error handling for migration with the TCP protocol. This is a minor degradation in error reporting for outgoing migration. However, until 1.2 this case just failed without even attempting to connect, so it is still an improvement as far as overall QoI is concerned. Reviewed-by: Luiz Capitulino Signed-off-by: Paolo Bonzini --- qemu-sockets.c | 15 ++++++--------- 1 file modificato, 6 inserzioni(+), 9 rimozioni(-) diff --git a/qemu-sockets.c b/qemu-sockets.c index 9e3d233..88d58fe 100644 --- a/qemu-sockets.c +++ b/qemu-sockets.c @@ -216,7 +216,7 @@ typedef struct ConnectState { } ConnectState; static int inet_connect_addr(struct addrinfo *addr, bool *in_progress, - ConnectState *connect_state); + ConnectState *connect_state, Error **errp); static void wait_for_connect(void *opaque) { @@ -246,7 +246,7 @@ static void wait_for_connect(void *opaque) if (s->current_addr) { 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); + s->fd = inet_connect_addr(s->current_addr, &in_progress, s, NULL); /* connect in progress */ if (in_progress) { return; @@ -263,7 +263,7 @@ static void wait_for_connect(void *opaque) } static int inet_connect_addr(struct addrinfo *addr, bool *in_progress, - ConnectState *connect_state) + ConnectState *connect_state, Error **errp) { int sock, rc; @@ -271,8 +271,7 @@ static int inet_connect_addr(struct addrinfo *addr, bool *in_progress, sock = qemu_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); if (sock < 0) { - fprintf(stderr, "%s: socket(%s): %s\n", __func__, - inet_strfamily(addr->ai_family), strerror(errno)); + error_set_errno(errp, errno, QERR_SOCKET_CREATE_FAILED); return -1; } qemu_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); @@ -293,6 +292,7 @@ static int inet_connect_addr(struct addrinfo *addr, bool *in_progress, connect_state); *in_progress = true; } else if (rc < 0) { + error_set_errno(errp, errno, QERR_SOCKET_CONNECT_FAILED); closesocket(sock); return -1; } @@ -375,7 +375,7 @@ int inet_connect_opts(QemuOpts *opts, Error **errp, if (connect_state != NULL) { connect_state->current_addr = e; } - sock = inet_connect_addr(e, &in_progress, connect_state); + sock = inet_connect_addr(e, &in_progress, connect_state, errp); if (in_progress) { return sock; } else if (sock >= 0) { @@ -386,9 +386,6 @@ int inet_connect_opts(QemuOpts *opts, Error **errp, break; } } - if (sock < 0) { - error_set(errp, QERR_SOCKET_CONNECT_FAILED); - } g_free(connect_state); freeaddrinfo(res); return sock;