Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 May 2009 08:11:56 GMT
From:      Sylvestre Gallon <syl@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 163069 for review
Message-ID:  <200905300811.n4U8BufT094292@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=163069

Change 163069 by syl@syl_rincewind on 2009/05/30 08:11:05

	- Set num_iso_packet in usb_xfer in libusb_alloc_transfer().
	- We must free usb_transfer and not libusb_transfer in libusb_free_transfer().
	- Update libusb_submit_transfer to follow libusb-1.0.1.

Affected files ...

.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#19 edit

Differences ...

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

@@ -682,19 +682,21 @@
 libusb_alloc_transfer(int iso_packets)
 {
 	struct libusb_transfer *xfer;
+	struct usb_transfer *bxfer;
 	int len;
 
 	len = sizeof(struct libusb_transfer) +
 	    sizeof(struct usb_transfer) +
 	    (iso_packets * sizeof(libusb_iso_packet_descriptor));
 
-	xfer = malloc(len);
-	if (xfer == NULL)
+	bxfer = malloc(len);
+	if (bxfer == NULL)
 		return (NULL);
 
-	memset(xfer, 0, len);
+	memset(bxfer, 0, len);
+	bxfer->num_iso_packets = iso_packets;
 
-	xfer = (struct libusb_transfer *) ((uint8_t *)xfer + 
+	xfer = (struct libusb_transfer *) ((uint8_t *)bxfer + 
 	    sizeof(struct usb_transfer));
 	return (xfer);
 }
@@ -702,15 +704,20 @@
 void
 libusb_free_transfer(struct libusb_transfer *xfer)
 {
+	struct usb_transfer *bxfer;
+
 	if (xfer == NULL)
 		return ;
 
+	bxfer = (struct usb_transfer *) ((uint8_t *)xfer - 
+	    sizeof(struct usb_transfer));
+
 	if (xfer->buffer)
 		free(xfer->buffer);
 	if (xfer->user_data)
 		free(xfer->user_data);
 
-	free(xfer);
+	free(bxfer);
 	return;
 }
 
@@ -745,14 +752,18 @@
 	usb_backend->transferred = 0;
 	usb_backend->flags = 0;
 
-	ret = clock_gettime(CLOCK_MONOTONIC, &cur_ts);
-	cur_ts.tv_sec += xfer->timeout / 1000;
-	cur_ts.tv_nsec += (xfer->timeout % 1000) * 1000000;
-	if (cur_ts.tv_nsec > 1000000000) {
-		cur_ts.tv_nsec -= 1000000000;
-		cur_ts.tv_sec++;
+	if (xfer->timeout != 0) {
+		ret = clock_gettime(CLOCK_MONOTONIC, &cur_ts);
+		cur_ts.tv_sec += xfer->timeout / 1000;
+		cur_ts.tv_nsec += (xfer->timeout % 1000) * 1000000;
+		
+		if (cur_ts.tv_nsec > 1000000000) {
+			cur_ts.tv_nsec -= 1000000000;
+			cur_ts.tv_sec++;
+		}
+		
+		TIMESPEC_TO_TIMEVAL(&usb_backend->timeout, &cur_ts);
 	}
-	TIMESPEC_TO_TIMEVAL(&usb_backend->timeout, &cur_ts);
 
 	/*Add to flying list*/
 	pthread_mutex_lock(&ctx->flying_transfers_lock);
@@ -760,7 +771,7 @@
 		LIST_ADD(&usb_backend->list, &ctx->flying_transfers);
 		goto out;
 	}
-	if (timerisset(&usb_backend->timeout)) {
+	if (timerisset(&usb_backend->timeout) == 0) {
 		LIST_ADD_TAIL(&usb_backend->list, &ctx->flying_transfers);
 		goto out;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905300811.n4U8BufT094292>