lib: abort if submitting transfer fails, don't deadlock when cancelling fails

Signed-off-by: Steve Markgraf <steve@steve-m.de>
master
Steve Markgraf 11 years ago
parent 3ab6fffbdd
commit d683b128f9
  1. 12
      src/librtlsdr.c

@ -1760,7 +1760,12 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
(void *)dev, (void *)dev,
BULK_TIMEOUT); BULK_TIMEOUT);
libusb_submit_transfer(dev->xfer[i]); r = libusb_submit_transfer(dev->xfer[i]);
if (r < 0) {
fprintf(stderr, "Failed to submit transfer %i!\n", i);
dev->async_status = RTLSDR_CANCELING;
break;
}
} }
while (RTLSDR_INACTIVE != dev->async_status) { while (RTLSDR_INACTIVE != dev->async_status) {
@ -1784,7 +1789,10 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
if (LIBUSB_TRANSFER_CANCELLED != if (LIBUSB_TRANSFER_CANCELLED !=
dev->xfer[i]->status) { dev->xfer[i]->status) {
libusb_cancel_transfer(dev->xfer[i]); r = libusb_cancel_transfer(dev->xfer[i]);
if (r < 0)
continue;
next_status = RTLSDR_CANCELING; next_status = RTLSDR_CANCELING;
} }
} }

Loading…
Cancel
Save