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