[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] minios: free fbfront resources on error/shutdown
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |