X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/bafd75c9511de5b554fb222331b88518ed2ee96e..325ed7030d39536af863e9c49b5fa04ac0a28d5d:/hmcfgusb.c diff --git a/hmcfgusb.c b/hmcfgusb.c index c90410a..83c9719 100644 --- a/hmcfgusb.c +++ b/hmcfgusb.c @@ -285,8 +285,11 @@ static void LIBUSB_CALL hmcfgusb_interrupt(struct libusb_transfer *transfer) if (err != 0) { fprintf(stderr, "Can't re-submit transfer: %s\n", usb_strerror(err)); libusb_free_transfer(transfer); - cb_data->dev->transfer = NULL; - free(cb_data); + if (cb_data) { + if (cb_data->dev) + cb_data->dev->transfer = NULL; + free(cb_data); + } } } @@ -433,13 +436,11 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) return -1; } else if (err == 0) { /* No pending timeout or a sane platform */ - tv.tv_sec = timeout; } else { if ((tv.tv_sec == 0) && (tv.tv_usec == 0)) { usb_event = 1; - } else if (tv.tv_sec > timeout) { - tv.tv_sec = timeout; - tv.tv_usec = 0; + } else if ((tv.tv_sec * 1000) < timeout) { + timeout = tv.tv_sec * 1000; } } @@ -448,7 +449,7 @@ int hmcfgusb_poll(struct hmcfgusb_dev *dev, int timeout) dev->pfd[i].revents = 0; } - n = poll(dev->pfd, dev->n_pfd, tv.tv_sec * 1000); + n = poll(dev->pfd, dev->n_pfd, timeout); if (n < 0) { perror("poll"); errno = 0;