summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Drake <dsd@gentoo.org>2008-07-08 21:15:54 -0500
committerDaniel Drake <dsd@gentoo.org>2008-07-08 21:16:31 -0500
commit6494f07a6d1b73ce786ae581c4ff691e39e61d19 (patch)
treed1120e9d8e557abad3cd7b4932cfde34889328b9
parent9140f5b414e37a3714cde9c6d6c87c963338a83a (diff)
downloadlibusb-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.c4
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)