mirror of
				https://github.com/rtlsdrblog/rtl-sdr-blog.git
				synced 2025-11-04 10:49:07 +01:00 
			
		
		
		
	lib: abort if submitting transfer fails, don't deadlock when cancelling fails
Signed-off-by: Steve Markgraf <steve@steve-m.de>
This commit is contained in:
		@@ -1760,7 +1760,12 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
 | 
			
		||||
					  (void *)dev,
 | 
			
		||||
					  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) {
 | 
			
		||||
@@ -1784,7 +1789,10 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx,
 | 
			
		||||
 | 
			
		||||
				if (LIBUSB_TRANSFER_CANCELLED !=
 | 
			
		||||
						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;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user