qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 4/7] net: Prevent multiple slirp instances


From: Mark McLoughlin
Subject: Re: [Qemu-devel] [PATCH 4/7] net: Prevent multiple slirp instances
Date: Wed, 15 Apr 2009 14:09:52 +0100

On Tue, 2009-04-14 at 19:29 +0200, Jan Kiszka wrote:
> The slirp stack is full of global variables which prevents instantiating
> it more than once. Catch this during net_slirp_init to prevent more harm
> later on.
> 
> Signed-off-by: Jan Kiszka <address@hidden>
> ---
> 
>  net.c |   14 +++++++++++++-
>  1 files changed, 13 insertions(+), 1 deletions(-)
> 
> diff --git a/net.c b/net.c
> index 787f249..0486f7c 100644
> --- a/net.c
> +++ b/net.c
> @@ -519,15 +519,27 @@ static void slirp_receive(void *opaque, const uint8_t 
> *buf, int size)
>      slirp_input(buf, size);
>  }
>  
> +static int slirp_in_use;
> +
> +static void net_slirp_cleanup(void *opaque)
> +{
> +    slirp_in_use = 0;
> +}
> +
>  static int net_slirp_init(VLANState *vlan, const char *model, const char 
> *name)
>  {
> +    if (slirp_in_use) {
> +        /* slirp only supports a single instance so far */
> +        return -1;
> +    }
>      if (!slirp_inited) {
>          slirp_inited = 1;
>          slirp_init(slirp_restrict, slirp_ip);
>      }
>      slirp_vc = qemu_new_vlan_client(vlan, model, name,
> -                                    slirp_receive, NULL, NULL, NULL);
> +                                    slirp_receive, NULL, net_slirp_cleanup, 
> NULL);
>      slirp_vc->info_str[0] = '\0';
> +    slirp_in_use = 1;
>      return 0;

Yeah, it's ugly but probably the best we can do right now.

Acked-by: Mark McLoughlin <address@hidden>

Cheers,
Mark.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]