libftdi Archives
|
From: | Omri Steiner <omri@xxxxxxxxxxxx> |
---|---|
To: | libftdi@xxxxxxxxxxxxxxxxxxxxxxx |
Cc: | Eugene Hutorny <eugene@xxxxxxxxxxxxx> |
Date: | Wed, 2 Oct 2019 15:25:04 +0300 |
I'm not sure where you supplied the patch which adds timeouts. Anyway, here's a patch which fixes it w/o adding hardcoded timeouts (they're hardcoded inside libusb instead). It also doesn't break the API. diff --git a/src/ftdi.c b/src/ftdi.c index 988a9f1..ed2c817 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -1884,22 +1884,16 @@ struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, u int ftdi_transfer_data_done(struct ftdi_transfer_control *tc) { int ret; - struct timeval to = { 0, 0 }; while (!tc->completed) { - ret = libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx, - &to, &tc->completed); + ret = libusb_handle_events_completed(tc->ftdi->usb_ctx, + &tc->completed); if (ret < 0) { if (ret == LIBUSB_ERROR_INTERRUPTED) continue; - libusb_cancel_transfer(tc->transfer); - while (!tc->completed) - if (libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx, - &to, &tc->completed) < 0) - break; - libusb_free_transfer(tc->transfer); - free (tc); + + ftdi_transfer_data_cancel(tc, NULL); return ret; } } @@ -1931,18 +1925,23 @@ int ftdi_transfer_data_done(struct ftdi_transfer_control *tc) void ftdi_transfer_data_cancel(struct ftdi_transfer_control *tc, struct timeval * to) { - struct timeval tv = { 0, 0 }; - + int ret; if (!tc->completed && tc->transfer != NULL) { - if (to == NULL) - to = &tv; - libusb_cancel_transfer(tc->transfer); while (!tc->completed) { - if (libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx, to, &tc->completed) < 0) + if (to != NULL) { + ret = libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx, + to, &tc->completed) < 0; + } else { + ret = libusb_handle_events_completed(tc->ftdi->usb_ctx, + &tc->completed) < 0; + } + + if (ret < 0) { break; + } } } On Wed, Oct 2, 2019 at 2:28 PM Thomas Jarosch <thomas.jarosch@xxxxxxxxxxxxx> wrote: Hi Omri, libftdi - see http://www.intra2net.com/en/developer/libftdi for details. |
Current Thread |
---|
|