diff options
author | Daniel Drake <dsd@gentoo.org> | 2008-07-08 21:15:54 -0500 |
---|---|---|
committer | Daniel Drake <dsd@gentoo.org> | 2008-07-08 21:16:31 -0500 |
commit | 6494f07a6d1b73ce786ae581c4ff691e39e61d19 (patch) | |
tree | d1120e9d8e557abad3cd7b4932cfde34889328b9 | |
parent | 9140f5b414e37a3714cde9c6d6c87c963338a83a (diff) | |
download | libusb-6494f07a6d1b73ce786ae581c4ff691e39e61d19.tar.gz |
Linux: fix bulk/iso transfer double-cancellation
Reset counters to 0 so that it's possible to cancel a transfer twice
without breaking things. Not sure that I want to support this properly,
but this makes it work at least.
-rw-r--r-- | libusb/os/linux_usbfs.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index 418a017..095a4ab 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -1564,6 +1564,8 @@ static void cancel_bulk_transfer(struct usbi_transfer *itransfer) int i; tpriv->reap_action = CANCELLED; + tpriv->awaiting_reap = 0; + tpriv->awaiting_discard = 0; for (i = 0; i < tpriv->num_urbs; i++) { int tmp = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, &tpriv->urbs[i]); if (tmp == 0) @@ -1586,6 +1588,8 @@ static void cancel_iso_transfer(struct usbi_transfer *itransfer) int i; tpriv->reap_action = CANCELLED; + tpriv->awaiting_reap = 0; + tpriv->awaiting_discard = 0; for (i = 0; i < tpriv->num_urbs; i++) { int tmp = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, tpriv->iso_urbs[i]); if (tmp == 0) |