PERFORCE change 164366 for review

Sylvestre Gallon syl at FreeBSD.org
Sun Jun 14 18:31:13 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=164366

Change 164366 by syl at syl_atuin on 2009/06/14 18:31:10

	       - Remove current transfer from flying_list on TRANSFER_COMPLETE.
	       - Call libusb_transfer->callback on TRANSFER_COMPLETE.

Affected files ...

.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#31 edit
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#11 edit

Differences ...

==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#31 (text+ko) ====

@@ -680,22 +680,32 @@
 static void
 libusb10_proxy(struct libusb20_transfer *xfer)
 {
+	struct usb_transfer *usb_backend;
+	libusb_transfer *usb_xfer;
+	libusb_context *ctx;
 	uint8_t status;
-	libusb_transfer *usb_xfer;
+
+	usb_backend = (struct usb_transfer *) ((uint8_t *)xfer - 
+	    sizeof(struct usb_transfer));
 
 	pthread_mutex_lock(&libusb20_lock);
 
 	status = libusb20_tr_get_status(xfer);
-	usb_xfer = (libusb_transfer *)libusb20_tr_get_priv_sc0(xfer);
+	usb_xfer = libusb20_tr_get_priv_sc0(xfer);
+	ctx = usb_xfer->dev_handle->dev->ctx;
 
 	switch (status) {
 	case LIBUSB20_TRANSFER_COMPLETED:
 		usb_xfer->actual_length += libusb20_tr_get_actual_length(xfer);
+		usb_xfer->callback(usb_xfer);
+		
+		pthread_mutex_lock(&ctx->flying_transfers_lock);
+		LIST_DEL(&usb_backend->list);
+		pthread_mutex_unlock(&ctx->flying_transfers_lock);
 		break ;
 	case LIBUSB20_TRANSFER_START:
 		usb_xfer->actual_length = 0;
-		switch (usb_xfer->type)
-		{
+		switch (usb_xfer->type) {
 			case LIBUSB_TRANSFER_TYPE_CONTROL:
 				libusb20_tr_setup_control(xfer, usb_xfer->buffer,
 				    (void *)(((uint8_t *) usb_xfer->buffer) + 

==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#11 (text+ko) ====



More information about the p4-projects mailing list