<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Did you also fix the pthread_mutex_unlock when it was already unlocked?  The cmake patch should get included too.<br><br>For me this dumps core with an abort, so it sounds like the thread thing:<br><br>Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle<br>Found Rafael Micro R820T tuner<br>Oversampling input by: 2x.<br>Oversampling output by: 4x.<br>Buffer size: 6.02ms<br>Tuned to 88856000 Hz.<br>Sampling at 1360000 Hz.<br>Output at 32000 Hz.<br>Exact sample rate is: 1360000.050439 Hz<br>Tuner gain set to automatic.<br>Reading samples in sync mode...<br>In:0.00% 00:00:00.00 [00:00:00.00] Out:0     [      |      ]        Clip:0<br>Done.<br>Abort (core dumped)<br><br>This is OpenBSD 5.2 with the libusbs from ports:<br><br>d530# pkg_info | grep
 libusb<br>libusb-compat-0.1.4 libusb-0.1 compatibility layer for libusb1<br>libusb1-1.0.9p3     library for USB device access from userspace<br><br>  Alan<br><br>-----<br>
Radio Astronomy - the ultimate DX<br><br>--- On <b>Tue, 4/23/13, Stuart Henderson <i><stu@spacehopper.org></i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Stuart Henderson <stu@spacehopper.org><br>Subject: [PATCH 1/1] add -S (synchronous) mode to rtl_fm<br>To: osmocom-sdr@lists.osmocom.org<br>Date: Tuesday, April 23, 2013, 10:47 AM<br><br><div class="plainMail">The enclosed diff adds a synchronous mode to rtl_fm. This helps<br>OpenBSD (where libusb async isn't yet working).<br><br>Signed-off-by: Stuart Henderson <<a ymailto="mailto:stu@spacehopper.org" href="/mc/compose?to=stu@spacehopper.org">stu@spacehopper.org</a>><br>---<br> src/rtl_fm.c | 29 +++++++++++++++++++++++++----<br> 1 file changed, 25 insertions(+), 4 deletions(-)<br><br>diff --git a/src/rtl_fm.c b/src/rtl_fm.c<br>index e8ebb77..a71e287 100644<br>--- a/src/rtl_fm.c<br>+++ b/src/rtl_fm.c<br>@@
 -128,6 +128,7 @@ void usage(void)<br>         "\t[-E sets lower edge tuning (default: center)]\n"<br>         "\t[-N enables NBFM mode (default: on)]\n"<br>         "\t[-W enables WBFM mode (default: off)]\n"<br>+        "\t[-S force sync output (default: async)]\n"<br>         "\t (-N -s 170k -o 4 -A fast -r 32k -l 0 -D)\n"<br>         "\tfilename (a '-' dumps samples to stdout)\n"<br>         "\t (omitting the filename also uses stdout)\n\n"<br>@@ -723,12 +724,14 @@ int main(int argc, char **argv)<br>     uint32_t dev_index = 0;<br>     int device_count;<br>     int ppm_error = 0;<br>+    int sync_mode = 0;<br>     char vendor[256], product[256], serial[256];<br>+<br>
     fm_init(&fm);<br>     pthread_mutex_init(&data_ready, NULL);<br>     pthread_mutex_init(&data_write, NULL);<br> <br>-    while ((opt = getopt(argc, argv, "d:f:g:s:b:l:o:t:r:p:EFA:NWMULRDC")) != -1) {<br>+    while ((opt = getopt(argc, argv, "d:f:g:s:b:l:o:t:r:p:EFA:NWMULRDSC")) != -1) {<br>         switch (opt) {<br>         case 'd':<br>             dev_index = atoi(optarg);<br>@@ -815,6 +818,9 @@ int main(int argc, char **argv)<br>         case 'R':<br>             fm.mode_demod = &raw_demod;<br>             break;<br>+        case 'S':<br>+            sync_mode =
 1;<br>+            break;<br>         default:<br>             usage();<br>             break;<br>@@ -921,9 +927,24 @@ int main(int argc, char **argv)<br>         fprintf(stderr, "WARNING: Failed to reset buffers.\n");}<br> <br>     pthread_create(&demod_thread, NULL, demod_thread_fn, (void *)(&fm));<br>-    rtlsdr_read_async(dev, rtlsdr_callback, (void *)(&fm),<br>-                  DEFAULT_ASYNC_BUF_NUMBER,<br>-                  lcm_post[fm.post_downsample] * DEFAULT_BUF_LENGTH);<br>+    if (sync_mode) {<br>+        fprintf(stderr, "Reading samples in sync
 mode...\n");<br>+        while (!do_exit) {<br>+            r = rtlsdr_read_sync(dev, &fm.buf,<br>+                         lcm_post[fm.post_downsample] * DEFAULT_BUF_LENGTH,<br>+                         &fm.buf_len);<br>+            if (r < 0) {<br>+                fprintf(stderr, "WARNING: sync read failed.\n");<br>+                break;<br>+            }<br>+            full_demod(&fm);<br>+   
     }<br>+    } else {<br>+        fprintf(stderr, "Reading samples in async mode...\n");<br>+        rtlsdr_read_async(dev, rtlsdr_callback, (void *)(&fm),<br>+                  DEFAULT_ASYNC_BUF_NUMBER,<br>+                  lcm_post[fm.post_downsample] * DEFAULT_BUF_LENGTH);<br>+    }<br> <br>     if (do_exit) {<br>         fprintf(stderr, "\nUser cancel, exiting...\n");}<br>-- <br>1.8.1.3<br><br><br><br></div></blockquote></td></tr></table>