diff options
author | reillyg <reillyg@chromium.org> | 2015-03-23 15:48:30 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-23 22:49:21 +0000 |
commit | e56e8ef67c39f1a6ea256939ec8f6f5ee82e59cf (patch) | |
tree | bb87f38a7ad406cba65fcd977590af6dfb194ad8 /third_party/libusb | |
parent | 128fddc8e9fa0e74f41d152c7cd62c0c31275ebe (diff) | |
download | chromium_src-e56e8ef67c39f1a6ea256939ec8f6f5ee82e59cf.zip chromium_src-e56e8ef67c39f1a6ea256939ec8f6f5ee82e59cf.tar.gz chromium_src-e56e8ef67c39f1a6ea256939ec8f6f5ee82e59cf.tar.bz2 |
libusb: Fix composite_close to close HID handles as well.
When opening a composite device some combination of the WinUSB and HID
APIs may be used. This patch fixes composite_close to close both WinUSB
file handles and HID file handles.
BUG=466578
Review URL: https://codereview.chromium.org/1032563002
Cr-Commit-Position: refs/heads/master@{#321881}
Diffstat (limited to 'third_party/libusb')
-rw-r--r-- | third_party/libusb/README.chromium | 1 | ||||
-rw-r--r-- | third_party/libusb/composite-hid-close.patch | 32 | ||||
-rw-r--r-- | third_party/libusb/src/libusb/os/windows_usb.c | 7 |
3 files changed, 40 insertions, 0 deletions
diff --git a/third_party/libusb/README.chromium b/third_party/libusb/README.chromium index c00bdd2..fc81c05 100644 --- a/third_party/libusb/README.chromium +++ b/third_party/libusb/README.chromium @@ -18,3 +18,4 @@ Local Modifications: - darwin-sigfpe.patch has been applied. - upstream-tick147.patch has been applied. - linux-udev.patch has been applied. +- composite-hid-close.patch has been applied. diff --git a/third_party/libusb/composite-hid-close.patch b/third_party/libusb/composite-hid-close.patch new file mode 100644 index 0000000..d6749cf --- /dev/null +++ b/third_party/libusb/composite-hid-close.patch @@ -0,0 +1,32 @@ +diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c +index 9ae11b1..259897e 100644 +--- a/libusb/os/windows_usb.c ++++ b/libusb/os/windows_usb.c +@@ -4236,6 +4236,7 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + uint8_t i; + bool available[SUB_API_MAX]; ++ bool has_hid = false; + + for (i = 0; i<SUB_API_MAX; i++) { + available[i] = false; +@@ -4245,6 +4246,8 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle + if ( (priv->usb_interface[i].apib->id == USB_API_WINUSBX) + && (priv->usb_interface[i].sub_api != SUB_API_NOTSET) ) { + available[priv->usb_interface[i].sub_api] = true; ++ } else if (priv->usb_interface[i].apib->id == USB_API_HID) { ++ has_hid = true; + } + } + +@@ -4253,6 +4256,10 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle + usb_api_backend[USB_API_WINUSBX].close(i, dev_handle); + } + } ++ ++ if (has_hid) { ++ usb_api_backend[USB_API_HID].close(sub_api, dev_handle); ++ } + } + + static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) diff --git a/third_party/libusb/src/libusb/os/windows_usb.c b/third_party/libusb/src/libusb/os/windows_usb.c index 9ae11b1..259897e 100644 --- a/third_party/libusb/src/libusb/os/windows_usb.c +++ b/third_party/libusb/src/libusb/os/windows_usb.c @@ -4236,6 +4236,7 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle struct windows_device_priv *priv = _device_priv(dev_handle->dev); uint8_t i; bool available[SUB_API_MAX]; + bool has_hid = false; for (i = 0; i<SUB_API_MAX; i++) { available[i] = false; @@ -4245,6 +4246,8 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle if ( (priv->usb_interface[i].apib->id == USB_API_WINUSBX) && (priv->usb_interface[i].sub_api != SUB_API_NOTSET) ) { available[priv->usb_interface[i].sub_api] = true; + } else if (priv->usb_interface[i].apib->id == USB_API_HID) { + has_hid = true; } } @@ -4253,6 +4256,10 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle usb_api_backend[USB_API_WINUSBX].close(i, dev_handle); } } + + if (has_hid) { + usb_api_backend[USB_API_HID].close(sub_api, dev_handle); + } } static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) |