diff options
Diffstat (limited to 'usb-linux.c')
| -rw-r--r-- | usb-linux.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/usb-linux.c b/usb-linux.c index 3a87ba6..b401cde 100644 --- a/usb-linux.c +++ b/usb-linux.c | |||
| @@ -51,6 +51,8 @@ static struct collection device_list; | |||
| 51 | 51 | ||
| 52 | static struct timeval next_dev_poll_time; | 52 | static struct timeval next_dev_poll_time; |
| 53 | 53 | ||
| 54 | static int devlist_failures; | ||
| 55 | |||
| 54 | static void usb_disconnect(struct usb_device *dev) | 56 | static void usb_disconnect(struct usb_device *dev) |
| 55 | { | 57 | { |
| 56 | if(!dev->dev) { | 58 | if(!dev->dev) { |
| @@ -219,9 +221,21 @@ static int usb_discover(void) | |||
| 219 | 221 | ||
| 220 | cnt = libusb_get_device_list(NULL, &devs); | 222 | cnt = libusb_get_device_list(NULL, &devs); |
| 221 | if(cnt < 0) { | 223 | if(cnt < 0) { |
| 222 | usbmuxd_log(LL_FATAL, "Could not get device list: %d", cnt); | 224 | usbmuxd_log(LL_WARNING, "Could not get device list: %d", cnt); |
| 223 | return cnt; | 225 | devlist_failures++; |
| 226 | // sometimes libusb fails getting the device list if you've just removed something | ||
| 227 | if(devlist_failures > 5) { | ||
| 228 | usbmuxd_log(LL_FATAL, "Too many errors getting device list\n"); | ||
| 229 | return cnt; | ||
| 230 | } else { | ||
| 231 | gettimeofday(&next_dev_poll_time, NULL); | ||
| 232 | next_dev_poll_time.tv_usec += DEVICE_POLL_TIME * 1000; | ||
| 233 | next_dev_poll_time.tv_sec += next_dev_poll_time.tv_usec / 1000000; | ||
| 234 | next_dev_poll_time.tv_usec = next_dev_poll_time.tv_usec % 1000000; | ||
| 235 | return 0; | ||
| 236 | } | ||
| 224 | } | 237 | } |
| 238 | devlist_failures = 0; | ||
| 225 | 239 | ||
| 226 | usbmuxd_log(LL_SPEW, "usb_discover: scanning %d devices", cnt); | 240 | usbmuxd_log(LL_SPEW, "usb_discover: scanning %d devices", cnt); |
| 227 | 241 | ||
| @@ -462,6 +476,7 @@ int usb_init(void) | |||
| 462 | int res; | 476 | int res; |
| 463 | usbmuxd_log(LL_DEBUG, "usb_init for linux / libusb 1.0"); | 477 | usbmuxd_log(LL_DEBUG, "usb_init for linux / libusb 1.0"); |
| 464 | 478 | ||
| 479 | devlist_failures = 0; | ||
| 465 | res = libusb_init(NULL); | 480 | res = libusb_init(NULL); |
| 466 | //libusb_set_debug(NULL, 3); | 481 | //libusb_set_debug(NULL, 3); |
| 467 | if(res != 0) { | 482 | if(res != 0) { |
