svn commit: r302273 - stable/9/lib/libusb
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Jun 29 10:46:12 UTC 2016
Author: hselasky
Date: Wed Jun 29 10:46:10 2016
New Revision: 302273
URL: https://svnweb.freebsd.org/changeset/base/302273
Log:
MFC r301842:
Implement code to stop all USB endpoints before executing a USB device
reset command, alternate setting command or set configuration
command. Else LibUSB v1.0 will not re-open the endpoints which the
kernel closes and the USB application might wait infinitely for
transfers to complete.
Modified:
stable/9/lib/libusb/libusb10.c
Directory Properties:
stable/9/lib/ (props changed)
stable/9/lib/libusb/ (props changed)
Modified: stable/9/lib/libusb/libusb10.c
==============================================================================
--- stable/9/lib/libusb/libusb10.c Wed Jun 29 10:43:31 2016 (r302272)
+++ stable/9/lib/libusb/libusb10.c Wed Jun 29 10:46:10 2016 (r302273)
@@ -45,6 +45,8 @@
#include "libusb.h"
#include "libusb10.h"
+#define LIBUSB_NUM_SW_ENDPOINTS (16 * 4)
+
static pthread_mutex_t default_context_lock = PTHREAD_MUTEX_INITIALIZER;
struct libusb_context *usbi_default_context = NULL;
@@ -436,7 +438,7 @@ libusb_open(libusb_device *dev, libusb_d
if (dev == NULL)
return (LIBUSB_ERROR_INVALID_PARAM);
- err = libusb20_dev_open(pdev, 16 * 4 /* number of endpoints */ );
+ err = libusb20_dev_open(pdev, LIBUSB_NUM_SW_ENDPOINTS);
if (err) {
libusb_unref_device(dev);
return (LIBUSB_ERROR_NO_MEM);
@@ -1489,7 +1491,17 @@ libusb_cancel_transfer(struct libusb_tra
UNEXPORTED void
libusb10_cancel_all_transfer(libusb_device *dev)
{
- /* TODO */
+ struct libusb20_device *pdev = dev->os_priv;
+ unsigned x;
+
+ for (x = 0; x != LIBUSB_NUM_SW_ENDPOINTS; x++) {
+ struct libusb20_transfer *xfer;
+
+ xfer = libusb20_tr_get_pointer(pdev, x);
+ if (xfer == NULL)
+ continue;
+ libusb20_tr_close(xfer);
+ }
}
uint16_t
More information about the svn-src-stable-9
mailing list