From 97a92b26cab15abfb1343dd332424a8208027d66 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Mon, 3 Jun 2013 23:33:31 +1000 Subject: [PATCH] Sleep right up to the timeout instead of the first half if we find ourselves polling in _usb_read --- usbutils.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/usbutils.c b/usbutils.c index 9068ee1e..a44cdfec 100644 --- a/usbutils.c +++ b/usbutils.c @@ -2021,7 +2021,7 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro struct timeval tv_start; #endif struct timeval read_start, tv_finish; - unsigned int initial_timeout, half_time; + unsigned int initial_timeout, sleep_time; double max, done; int bufleft, err, got, tot; __maybe_unused bool first = true; @@ -2056,7 +2056,7 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro bufleft = bufsiz; err = LIBUSB_SUCCESS; initial_timeout = timeout; - half_time = initial_timeout / 2; + sleep_time = initial_timeout / 2; max = ((double)timeout) / 1000.0; cgtime(&read_start); while (bufleft > 0) { @@ -2110,9 +2110,11 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro * if we don't sleep here, but do it only if we're not * receiving any data. */ timeout = initial_timeout - (done * 1000); - if (!got && half_time && timeout > half_time) { - timeout -= half_time; - nmsleep(half_time); + if (!got && sleep_time) { + if (timeout <= sleep_time) + sleep_time = timeout - 1; + timeout -= sleep_time; + nmsleep(sleep_time); } } @@ -2131,7 +2133,7 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro endlen = strlen(end); err = LIBUSB_SUCCESS; initial_timeout = timeout; - half_time = initial_timeout / 2; + sleep_time = initial_timeout / 2; max = ((double)timeout) / 1000.0; cgtime(&read_start); while (bufleft > 0) { @@ -2198,9 +2200,11 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro break; timeout = initial_timeout - (done * 1000); - if (!got && half_time && timeout > half_time) { - timeout -= half_time; - nmsleep(half_time); + if (!got && sleep_time) { + if (timeout <= sleep_time) + sleep_time = timeout - 1; + timeout -= sleep_time; + nmsleep(sleep_time); } }