patch-2.4.0-test9 linux/drivers/media/video/cpia_usb.c

Next file: linux/drivers/mtd/cfi_cmdset_0002.c
Previous file: linux/drivers/media/video/buz.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test8/linux/drivers/media/video/cpia_usb.c linux/drivers/media/video/cpia_usb.c
@@ -187,7 +187,7 @@
 	if (ret < 0) {
 		printk(KERN_ERR "cpia_usb_open: usb_set_interface error (ret = %d)\n", ret);
 		retval = -EBUSY;
-		goto error_all;
+		goto error_1;
 	}
 
 	ucpia->buffers[0]->status = FRAME_EMPTY;
@@ -204,7 +204,7 @@
 	if (!urb) {
 		printk(KERN_ERR "cpia_init_isoc: usb_alloc_urb 0\n");
 		retval = -ENOMEM;
-		goto error_all;
+		goto error_1;
 	}
 
 	ucpia->sbuf[0].urb = urb;
@@ -223,9 +223,9 @@
 
 	urb = usb_alloc_urb(FRAMES_PER_DESC);
 	if (!urb) {
-		printk(KERN_ERR "cpia_init_isoc: usb_alloc_urb 0\n");
+		printk(KERN_ERR "cpia_init_isoc: usb_alloc_urb 1\n");
 		retval = -ENOMEM;
-		goto error_all;
+		goto error_urb0;
 	}
 
 	ucpia->sbuf[1].urb = urb;
@@ -246,20 +246,30 @@
 	ucpia->sbuf[0].urb->next = ucpia->sbuf[1].urb;
 	
 	err = usb_submit_urb(ucpia->sbuf[0].urb);
-	if (err)
+	if (err) {
 		printk(KERN_ERR "cpia_init_isoc: usb_submit_urb 0 ret %d\n",
 			err);
+		goto error_urb1;
+	}
 	err = usb_submit_urb(ucpia->sbuf[1].urb);
-	if (err)
+	if (err) {
 		printk(KERN_ERR "cpia_init_isoc: usb_submit_urb 1 ret %d\n",
 			err);
+		goto error_urb1;
+	}
 
 	ucpia->streaming = 1;
 	ucpia->open = 1;
 
 	return 0;
 
-error_all:
+error_urb1:		/* free urb 1 */
+	usb_free_urb(ucpia->sbuf[1].urb);
+
+error_urb0:		/* free urb 0 */
+	usb_free_urb(ucpia->sbuf[0].urb);
+
+error_1:
 	kfree (ucpia->sbuf[1].data);
 error_0:
 	kfree (ucpia->sbuf[0].data);

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)