Browse Source

Sleep right up to the timeout instead of the first half if we find ourselves polling in _usb_read

nfactor-troky
Con Kolivas 11 years ago
parent
commit
97a92b26ca
  1. 22
      usbutils.c

22
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; struct timeval tv_start;
#endif #endif
struct timeval read_start, tv_finish; struct timeval read_start, tv_finish;
unsigned int initial_timeout, half_time; unsigned int initial_timeout, sleep_time;
double max, done; double max, done;
int bufleft, err, got, tot; int bufleft, err, got, tot;
__maybe_unused bool first = true; __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; bufleft = bufsiz;
err = LIBUSB_SUCCESS; err = LIBUSB_SUCCESS;
initial_timeout = timeout; initial_timeout = timeout;
half_time = initial_timeout / 2; sleep_time = initial_timeout / 2;
max = ((double)timeout) / 1000.0; max = ((double)timeout) / 1000.0;
cgtime(&read_start); cgtime(&read_start);
while (bufleft > 0) { 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 * if we don't sleep here, but do it only if we're not
* receiving any data. */ * receiving any data. */
timeout = initial_timeout - (done * 1000); timeout = initial_timeout - (done * 1000);
if (!got && half_time && timeout > half_time) { if (!got && sleep_time) {
timeout -= half_time; if (timeout <= sleep_time)
nmsleep(half_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); endlen = strlen(end);
err = LIBUSB_SUCCESS; err = LIBUSB_SUCCESS;
initial_timeout = timeout; initial_timeout = timeout;
half_time = initial_timeout / 2; sleep_time = initial_timeout / 2;
max = ((double)timeout) / 1000.0; max = ((double)timeout) / 1000.0;
cgtime(&read_start); cgtime(&read_start);
while (bufleft > 0) { while (bufleft > 0) {
@ -2198,9 +2200,11 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro
break; break;
timeout = initial_timeout - (done * 1000); timeout = initial_timeout - (done * 1000);
if (!got && half_time && timeout > half_time) { if (!got && sleep_time) {
timeout -= half_time; if (timeout <= sleep_time)
nmsleep(half_time); sleep_time = timeout - 1;
timeout -= sleep_time;
nmsleep(sleep_time);
} }
} }

Loading…
Cancel
Save