librtlsdr.c suggestions

Leif Asbrink leif at sm5bsz.com
Sat Jan 26 03:05:41 UTC 2013


Hi All,

In case buffer allocation fails there will be a crash.

I suggest something like this in rtlsdr_read_async:

        if(_rtlsdr_alloc_async_buffers(dev) < 0)
          {
          _rtlsdr_free_async_buffers(dev);
          return -1;
          }

The function _rtlsdr_alloc_async_buffers needs tests for
malloc returning NULL with an appropriate return of an
error code to make the above work.


Immediately below the suggested change it may be a good idea
to introduce a small delay. Without this delay 
libusb-1.0 crashes under Windows if the sampling rate is high
and the computer is a bit slow:

        for(i = 0; i < dev->xfer_buf_num; ++i) {
#ifdef _WIN32
                Sleep(1);
#else
                usleep(1000);
#endif

                libusb_fill_bulk_transfer(dev->xfer[i],
                                          dev->devh,   
                                          0x81,


A little further down one more change is desireable:
                        /*fprintf(stderr, "handle_events returned: %d\n", r);
                        if (r == LIBUSB_ERROR_INTERRUPTED || r==-1) /* stray 

The error code -1 occurs frequently but the data supplied to
the application callback is perfectly OK. On faster computers
there is never any error, but with a Centrino Duo at 900 kHz
there are 2 or 3 errors (-1) for each proper return in case
small buffers are selected.

Regards

Leif




More information about the osmocom-sdr mailing list