ChangeSet 1.1276.22.4, 2003/08/22 15:31:47-07:00, [EMAIL PROTECTED]

[PATCH] USB: PATCH 4/19 Audit usb_register/usb_serial_register under divers/usb/serial


 drivers/usb/serial/empeg.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)


diff -Nru a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
--- a/drivers/usb/serial/empeg.c        Tue Sep  2 12:48:08 2003
+++ b/drivers/usb/serial/empeg.c        Tue Sep  2 12:48:08 2003
@@ -558,7 +558,7 @@
 static int __init empeg_init (void)
 {
        struct urb *urb;
-       int i;
+       int i, retval;
 
        /* create our write urb pool and transfer buffers */ 
        spin_lock_init (&write_urb_pool_lock);
@@ -570,7 +570,6 @@
                        continue;
                }
 
-               urb->transfer_buffer = NULL;
                urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, GFP_KERNEL);
                if (!urb->transfer_buffer) {
                        err("%s - out of memory for urb buffers.", 
@@ -579,12 +578,27 @@
                }
        }
 
-       usb_serial_register (&empeg_device);
-       usb_register (&empeg_driver);
+       retval = usb_serial_register(&empeg_device);
+       if (retval)
+               goto failed_usb_serial_register;
+       retval = usb_register(&empeg_driver);
+       if (retval)
+               goto failed_usb_register;
 
        info(DRIVER_VERSION ":" DRIVER_DESC);
 
        return 0;
+failed_usb_register:
+       usb_serial_deregister(&empeg_device);
+failed_usb_serial_register:
+       for (i = 0; i < NUM_URBS; ++i) {
+               if (write_urb_pool[i]) {
+                       if (write_urb_pool[i]->transfer_buffer)
+                               kfree(write_urb_pool[i]->transfer_buffer);
+                       usb_free_urb(write_urb_pool[i]);
+               }
+       }
+       return retval;
 }
 
 
@@ -593,7 +607,7 @@
        int i;
        unsigned long flags;
 
-       usb_register (&empeg_driver);
+       usb_deregister(&empeg_driver);
        usb_serial_deregister (&empeg_device);
 
        spin_lock_irqsave (&write_urb_pool_lock, flags);



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to