1
0
mirror of https://github.com/GOSTSec/sgminer synced 2025-02-06 03:54:25 +00:00

Discriminate between libusb transfer errors and regular libusb errors and make sure to capture them all.

This commit is contained in:
Con Kolivas 2013-11-03 21:59:34 +11:00
parent d1683fe6b1
commit 310aa75460

View File

@ -2341,6 +2341,9 @@ static void LIBUSB_CALL transfer_callback(struct libusb_transfer *transfer)
static int usb_transfer_toerr(int ret) static int usb_transfer_toerr(int ret)
{ {
if (ret <= 0)
return ret;
switch (ret) { switch (ret) {
default: default:
case LIBUSB_TRANSFER_COMPLETED: case LIBUSB_TRANSFER_COMPLETED:
@ -2456,15 +2459,18 @@ usb_bulk_transfer(struct libusb_device_handle *dev_handle, int intinfo,
errn = errno; errn = errno;
if (!err) if (!err)
err = callback_wait(&ut, transferred, callback_timeout); err = callback_wait(&ut, transferred, callback_timeout);
else
err = usb_transfer_toerr(err);
complete_usb_transfer(&ut); complete_usb_transfer(&ut);
STATS_TIMEVAL(&tv_finish); STATS_TIMEVAL(&tv_finish);
USB_STATS(cgpu, &tv_start, &tv_finish, err, mode, cmd, seq, timeout); USB_STATS(cgpu, &tv_start, &tv_finish, err, mode, cmd, seq, timeout);
if (err < 0) if (err < 0) {
applog(LOG_DEBUG, "%s%i: %s (amt=%d err=%d ern=%d)", applog(LOG_DEBUG, "%s%i: %s (amt=%d err=%d ern=%d)",
cgpu->drv->name, cgpu->device_id, cgpu->drv->name, cgpu->device_id,
usb_cmdname(cmd), *transferred, err, errn); usb_cmdname(cmd), *transferred, err, errn);
}
if (err == LIBUSB_ERROR_PIPE) { if (err == LIBUSB_ERROR_PIPE) {
int retries = 0; int retries = 0;