PERFORCE change 163069 for review
Sylvestre Gallon
syl at FreeBSD.org
Sat May 30 08:11:57 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=163069
Change 163069 by syl at 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;
}
More information about the p4-projects
mailing list