PERFORCE change 164680 for review
Sylvestre Gallon
syl at FreeBSD.org
Thu Jun 18 19:44:16 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=164680
Change 164680 by syl at syl_atuin on 2009/06/18 19:43:28
Fix bugs spotten by Hans Petter Selasky :
- Dequeue transfer if transfer status is != to LIBUSB20_TRANSFER_COMPLETED
or to LIBUSB20_TRANSFER_START
- Add +8 to ctrl buffsize.
- fix a bad condition.
Affected files ...
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#42 edit
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#15 edit
Differences ...
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#42 (text+ko) ====
@@ -886,37 +886,42 @@
default:
usb_xfer->actual_length = 0;
usb_xfer->status = LIBUSB_TRANSFER_CANCELLED;
+
+ pthread_mutex_lock(&ctx->flying_transfers_lock);
+ LIST_DEL(&usb_backend->list);
+ pthread_mutex_unlock(&ctx->flying_transfers_lock);
+
break ;
}
switch (status) {
case LIBUSB20_TRANSFER_COMPLETED:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "STATUS COMPLETED");
- xfer->status = LIBUSB_TRANSFER_COMPLETED;
+ usb_xfer->status = LIBUSB_TRANSFER_COMPLETED;
break ;
case LIBUSB20_TRANSFER_OVERFLOW:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "STATUS TR OVERFLOW");
- xfer->status = LIBUSB_TRANSFER_OVERFLOW;
+ usb_xfer->status = LIBUSB_TRANSFER_OVERFLOW;
break ;
case LIBUSB20_TRANSFER_NO_DEVICE:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "STATUS TR NO DEVICE");
- xfer->status = LIBUSB_TRANSFER_NO_DEVICE;
+ usb_xfer->status = LIBUSB_TRANSFER_NO_DEVICE;
break ;
case LIBUSB20_TRANSFER_STALL:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "STATUS TR STALL");
- xfer->status = LIBUSB_TRANSFER_STALL;
+ usb_xfer->status = LIBUSB_TRANSFER_STALL;
break ;
case LIBUSB20_TRANSFER_CANCELLED:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "STATUS TR CANCELLED");
- xfer->status = LIBUSB_TRANSFER_CANCELLED;
+ usb_xfer->status = LIBUSB_TRANSFER_CANCELLED;
break ;
case LIBUSB20_TRANSFER_TIMED_OUT:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "STATUS TR TIMEOUT");
- xfer->status = LIBUSB_TRANSFER_TIMED_OUT;
+ usb_xfer->status = LIBUSB_TRANSFER_TIMED_OUT;
break ;
case LIBUSB20_TRANSFER_ERROR:
dprintf(ctx, LIBUSB_DEBUG_TRANSFER, "ERROR");
- xfer->status = LIBUSB_TRANSFER_ERROR;
+ usb_xfer->status = LIBUSB_TRANSFER_ERROR;
break ;
default:
printf("other status : %i\n", status);
@@ -980,6 +985,8 @@
ret = 64;
break ;
}
+ /*add */
+ ret += 8;
break ;
default :
switch (usb_speed) {
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#15 (text+ko) ====
@@ -193,7 +193,7 @@
ret = libusb20_dev_process(devh->os_priv);
pthread_mutex_unlock(&libusb20_lock);
- if (ret == 0 || LIBUSB20_ERROR_NO_DEVICE)
+ if (ret == 0 || ret == LIBUSB20_ERROR_NO_DEVICE)
continue;
else if (ret < 0)
goto out;
More information about the p4-projects
mailing list