mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-23 04:54:26 +00:00
Sleep right up to the timeout instead of the first half if we find ourselves polling in _usb_read
This commit is contained in:
parent
3d631b7cbb
commit
97a92b26ca
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;
|
||||
#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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user