From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mv84O-0006wP-Bs for qemu-devel@nongnu.org; Tue, 06 Oct 2009 07:19:04 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mv84F-0006qX-Io for qemu-devel@nongnu.org; Tue, 06 Oct 2009 07:19:00 -0400 Received: from [199.232.76.173] (port=40402 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mv84E-0006q4-CU for qemu-devel@nongnu.org; Tue, 06 Oct 2009 07:18:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41576) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Mv84D-0007sR-GU for qemu-devel@nongnu.org; Tue, 06 Oct 2009 07:18:53 -0400 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n96BIqSx020637 for ; Tue, 6 Oct 2009 07:18:52 -0400 From: Mark McLoughlin Date: Tue, 6 Oct 2009 12:16:56 +0100 Message-Id: <1254827836-11021-7-git-send-email-markmc@redhat.com> In-Reply-To: <1254827783.2720.42.camel@blaa> References: <1254827783.2720.42.camel@blaa> Subject: [Qemu-devel] [PATCH] Make net_client_init() consume slirp_configs even on error List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Mark McLoughlin , Markus Armbruster From: Markus Armbruster net_slirp_init() walks slirp_configs, and stops when it encounters one that doesn't work. Instead of consuming slirp_configs members there, consume them in the sole caller. This makes sure all are consumed. Before, the tail starting with the non-working one was left in place, where it made the next net_slirp_init() fail again. Signed-off-by: Markus Armbruster Signed-off-by: Mark McLoughlin --- net.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff --git a/net.c b/net.c index 0e5afa9..a2507f9 100644 --- a/net.c +++ b/net.c @@ -761,6 +761,7 @@ static int net_slirp_init(Monitor *mon, VLANState *vlan, const char *model, uint32_t addr; int shift; char *end; + struct slirp_config_str *config; if (!tftp_export) { tftp_export = legacy_tftp_prefix; @@ -845,9 +846,7 @@ static int net_slirp_init(Monitor *mon, VLANState *vlan, const char *model, tftp_export, bootfile, dhcp, dns, s); QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry); - while (slirp_configs) { - struct slirp_config_str *config = slirp_configs; - + for (config = slirp_configs; config; config = config->next) { if (config->flags & SLIRP_CFG_HOSTFWD) { slirp_hostfwd(s, mon, config->str, config->flags & SLIRP_CFG_LEGACY); @@ -855,8 +854,6 @@ static int net_slirp_init(Monitor *mon, VLANState *vlan, const char *model, slirp_guestfwd(s, mon, config->str, config->flags & SLIRP_CFG_LEGACY); } - slirp_configs = config->next; - qemu_free(config); } #ifndef _WIN32 if (!smb_export) { @@ -2593,6 +2590,11 @@ int net_client_init(Monitor *mon, const char *device, const char *p) ret = net_slirp_init(mon, vlan, device, name, restricted, vnet, vhost, vhostname, tftp_export, bootfile, vdhcp_start, vnamesrv, smb_export, vsmbsrv); + while (slirp_configs) { + config = slirp_configs; + slirp_configs = config->next; + qemu_free(config); + } qemu_free(vnet); qemu_free(vhost); qemu_free(vhostname); -- 1.6.2.5