From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MsLdY-0000Ez-31 for qemu-devel@nongnu.org; Mon, 28 Sep 2009 15:11:52 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MsLdU-0000DD-1y for qemu-devel@nongnu.org; Mon, 28 Sep 2009 15:11:51 -0400 Received: from [199.232.76.173] (port=38793 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MsLdT-0000DA-Nd for qemu-devel@nongnu.org; Mon, 28 Sep 2009 15:11:47 -0400 Received: from oxygen.pond.sub.org ([213.239.205.148]:51139) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MsLdT-0007lH-2b for qemu-devel@nongnu.org; Mon, 28 Sep 2009 15:11:47 -0400 Received: from pike.pond.sub.org (pD9E39E9F.dip.t-dialin.net [217.227.158.159]) by oxygen.pond.sub.org (Postfix) with ESMTPA id D9D05276D47 for ; Mon, 28 Sep 2009 21:11:45 +0200 (CEST) From: Markus Armbruster Date: Mon, 28 Sep 2009 21:11:33 +0200 Message-Id: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 1/3] 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 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 --- net.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff --git a/net.c b/net.c index 3fdf1e6..61429ac 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) { @@ -2583,6 +2580,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