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

Re: [Xen-devel] [PATCH] minios: free fbfront resources on error/shutdown



Doesn't apply to xen-unstable tip c/s 17616.

 -- Keir

On 12/5/08 11:11, "Samuel Thibault" <samuel.thibault@xxxxxxxxxxxxx> wrote:

> minios: free fbfront resources on error/shutdown
> 
> Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
> 
> diff -r b0d7780794eb extras/mini-os/fbfront.c
> --- a/extras/mini-os/fbfront.c Thu May 08 13:40:40 2008 +0100
> +++ b/extras/mini-os/fbfront.c Mon May 12 12:10:30 2008 +0200
> @@ -47,6 +47,20 @@
>      files[fd].read = 1;
>  #endif
>      wake_up(&kbdfront_queue);
> +}
> +
> +static void free_kbdfront(struct kbdfront_dev *dev)
> +{
> +    mask_evtchn(dev->evtchn);
> +
> +    free(dev->backend);
> +
> +    free_page(dev->page);
> +
> +    unbind_evtchn(dev->evtchn);
> +
> +    free(dev->nodename);
> +    free(dev);
>  }
>  
>  struct kbdfront_dev *init_kbdfront(char *nodename, int abs_pointer)
> @@ -122,7 +136,7 @@
>  
>  abort_transaction:
>      xenbus_transaction_end(xbt, 1, &retry);
> -    return NULL;
> +    goto error;
>  
>  done:
>  
> @@ -130,7 +144,7 @@
>      msg = xenbus_read(XBT_NIL, path, &dev->backend);
>      if (msg) {
>          printk("Error %s when reading the backend path %s\n", msg, path);
> -        return NULL;
> + goto error;
>      }
>  
>      printk("backend at %s\n", dev->backend);
> @@ -153,6 +167,9 @@
>      printk("************************** KBDFRONT\n");
>  
>      return dev;
> +error:
> +    free_kbdfront(dev);
> +    return NULL;
>  }
>  
>  int kbdfront_receive(struct kbdfront_dev *dev, union xenkbd_in_event *buf,
> int n)
> @@ -208,12 +225,7 @@
>  
>      xenbus_unwatch_path(XBT_NIL, path);
>  
> -    unbind_evtchn(dev->evtchn);
> -
> -    free_pages(dev->page,0);
> -    free(nodename);
> -    free(dev->backend);
> -    free(dev);
> +    free_kbdfront(dev);
>  }
>  
>  #ifdef HAVE_LIBC
> @@ -260,6 +272,20 @@
>  void fbfront_handler(evtchn_port_t port, struct pt_regs *regs, void *data)
>  {
>      wake_up(&fbfront_queue);
> +}
> +
> +static void free_fbfront(struct fbfront_dev *dev)
> +{
> +    mask_evtchn(dev->evtchn);
> +
> +    free(dev->backend);
> +
> +    free_page(dev->page);
> +
> +    unbind_evtchn(dev->evtchn);
> +
> +    free(dev->nodename);
> +    free(dev);
>  }
>  
>  struct fbfront_dev *init_fbfront(char *nodename, unsigned long *mfns, int
> width, int height, int depth, int stride, int n)
> @@ -357,7 +383,7 @@
>  
>  abort_transaction:
>      xenbus_transaction_end(xbt, 1, &retry);
> -    return NULL;
> +    goto error;
>  
>  done:
>  
> @@ -365,7 +391,7 @@
>      msg = xenbus_read(XBT_NIL, path, &dev->backend);
>      if (msg) {
>          printk("Error %s when reading the backend path %s\n", msg, path);
> -        return NULL;
> +        goto error;
>      }
>  
>      printk("backend at %s\n", dev->backend);
> @@ -391,6 +417,10 @@
>      printk("************************** FBFRONT\n");
>  
>      return dev;
> +
> +error:
> +    free_fbfront(dev);
> +    return NULL;
>  }
>  
>  static void fbfront_out_event(struct fbfront_dev *dev, union xenfb_out_event
> *event)
> @@ -477,7 +507,7 @@
>  
>      unbind_evtchn(dev->evtchn);
>  
> -    free_pages(dev->page,0);
> +    free_page(dev->page);
>      free(nodename);
>      free(dev->backend);
>      free(dev);
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.