diff --git a/cgminer.c b/cgminer.c index 2d9af7df8a..6d06a07281 100644 --- a/cgminer.c +++ b/cgminer.c @@ -9621,9 +9621,11 @@ static void reinit_usb(void) applog(LOG_DEBUG, "Reinitialising libusb"); libusb_exit(NULL); + cgusb_uninitialize(); err = libusb_init(NULL); if (err) quit(1, "Reinit of libusb failed err %d:%s", err, libusb_error_name(err)); + cgusb_check_init(); usb_reinit = false; } diff --git a/usbutils.c b/usbutils.c index 7c83a35f66..1be3bd6c7a 100644 --- a/usbutils.c +++ b/usbutils.c @@ -1484,7 +1484,12 @@ void usb_all(int level) libusb_free_device_list(list, 1); } -static void cgusb_check_init() +void cgusb_uninitialize() +{ + stats_initialised = false; +} + +void cgusb_check_init() { mutex_lock(&cgusb_lock); diff --git a/usbutils.h b/usbutils.h index 37a347d021..5acb7e088e 100644 --- a/usbutils.h +++ b/usbutils.h @@ -487,6 +487,8 @@ struct cgpu_info; bool async_usb_transfers(void); void cancel_usb_transfers(void); void usb_all(int level); +void cgusb_check_init(); +void cgusb_uninitialize(); void usb_list(void); const char *usb_cmdname(enum usb_cmds cmd); void usb_applog(struct cgpu_info *cgpu, enum usb_cmds cmd, char *msg, int amount, int err);