summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2012-08-22 01:32:10 -0700
committerPete Batard <pete@akeo.ie>2012-08-22 22:09:52 +0100
commit01f31ebe1ebfa552980750a1f3d2847819dea25a (patch)
tree7e5b0c820b2a502455acf81c2c8571a7a60fff82
parent9ceb3bcd5ef5deda2a2c0d34dbef23f4afaff93d (diff)
downloadlibusb-01f31ebe1ebfa552980750a1f3d2847819dea25a.tar.gz
Core: Handle >= 1 second transfer timeout in libusb_submit_transfer()
* Comparisons between tv_nsec and 1 sec should be >= rather than >, as we can end up in situations where tv_nsec is exactly 1000000000, which calls such as timerfd_create() do not accept. * Issue reported by Sebastian K. See: https://sourceforge.net/mailarchive/message.php?msg_id=29706972
-rw-r--r--libusb/io.c7
-rw-r--r--libusb/version_nano.h2
2 files changed, 4 insertions, 5 deletions
diff --git a/libusb/io.c b/libusb/io.c
index 902be15..8a8bc67 100644
--- a/libusb/io.c
+++ b/libusb/io.c
@@ -1141,7 +1141,7 @@ static int calculate_timeout(struct usbi_transfer *transfer)
current_time.tv_sec += timeout / 1000;
current_time.tv_nsec += (timeout % 1000) * 1000000;
- if (current_time.tv_nsec > 1000000000) {
+ while (current_time.tv_nsec >= 1000000000) {
current_time.tv_nsec -= 1000000000;
current_time.tv_sec++;
}
@@ -1204,8 +1204,7 @@ out:
USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout);
r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL);
if (r < 0) {
- usbi_warn(ctx, "failed to arm first timerfd (errno %d, it_value = %d:%d)",
- errno, it.it_value.tv_sec, it.it_value.tv_nsec);
+ usbi_warn(ctx, "failed to arm first timerfd (errno %d)", errno);
r = LIBUSB_ERROR_OTHER;
}
}
@@ -1745,7 +1744,7 @@ int API_EXPORTED libusb_wait_for_event(libusb_context *ctx, struct timeval *tv)
timeout.tv_sec += tv->tv_sec;
timeout.tv_nsec += tv->tv_usec * 1000;
- if (timeout.tv_nsec > 1000000000) {
+ while (timeout.tv_nsec >= 1000000000) {
timeout.tv_nsec -= 1000000000;
timeout.tv_sec++;
}
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 019705e..ffc2981 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 10552
+#define LIBUSB_NANO 10553