PERFORCE change 153087 for review

Hans Petter Selasky hselasky at FreeBSD.org
Mon Nov 17 06:59:19 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=153087

Change 153087 by hselasky at hselasky_laptop001 on 2008/11/17 14:59:00

	
	Libusb20 improvements.

Affected files ...

.. //depot/projects/usb/src/lib/libusb20/libusb20_compat01.c#9 edit
.. //depot/projects/usb/src/lib/libusb20/libusb20_ugen20.c#12 edit

Differences ...

==== //depot/projects/usb/src/lib/libusb20/libusb20_compat01.c#9 (text+ko) ====

@@ -177,19 +177,42 @@
 	if (err)
 		return (NULL);
 
+	/*
+	 * Dequeue USB device from backend queue so that it does not get
+	 * freed when the backend is re-scanned:
+	 */
+	libusb20_be_dequeue_device(usb_backend, dev->dev);
+
 	return (dev->dev);
 }
 
 int
-usb_close(usb_dev_handle * dev)
+usb_close(usb_dev_handle * udev)
 {
+	struct usb_device *dev;
 	int err;
 
-	err = libusb20_dev_close((void *)dev);
+	err = libusb20_dev_close((void *)udev);
 
 	if (err)
 		return (-1);
 
+	if (usb_backend != NULL) {
+		/*
+		 * Enqueue USB device to backend queue so that it gets freed
+		 * when the backend is re-scanned:
+		 */
+		libusb20_be_enqueue_device(usb_backend, (void *)udev);
+	} else {
+		/*
+		 * The backend is gone. Free device data so that we
+		 * don't start leaking memory!
+		 */
+		dev = usb_device(udev);
+		libusb20_dev_free((void *)udev);
+		LIST_DEL(usb_global_bus.devices, dev);
+		free(dev);
+	}
 	return (0);
 }
 
@@ -697,7 +720,8 @@
 				/* "bConfigurationValue" not found */
 				return (-1);
 			}
-			if ((dev->config + i)->bConfigurationValue == bConfigurationValue) {
+			if ((dev->config + i)->bConfigurationValue ==
+			    bConfigurationValue) {
 				break;
 			}
 		}

==== //depot/projects/usb/src/lib/libusb20/libusb20_ugen20.c#12 (text+ko) ====

@@ -432,12 +432,11 @@
 ugen20_close_device(struct libusb20_device *pdev)
 {
 	struct usb2_fs_uninit fs_uninit;
-	int error = 0;
 
 	if (pdev->privBeData) {
 		memset(&fs_uninit, 0, sizeof(fs_uninit));
 		if (ioctl(pdev->file, USB_FS_UNINIT, &fs_uninit)) {
-			error = LIBUSB20_ERROR_OTHER;
+			/* ignore this error */
 		}
 		free(pdev->privBeData);
 	}
@@ -447,7 +446,7 @@
 	close(pdev->file_ctrl);
 	pdev->file = -1;
 	pdev->file_ctrl = -1;
-	return (error);
+	return (0);			/* success */
 }
 
 static void


More information about the p4-projects mailing list