rtl_adsb: fix hanging upon a signal in Fedora 27

This code stayed unchanged for many years, but for some reason
rtl_adsb started hanging upon exit:

*b66116a5164b69281eacc42ae950;
^CSignal caught, exiting!
 <------ hangs here forever

Examining it with gdb reveals that the demod thread waits
peacefully on the condition variable, which we're trying to
destroy. Either the signals killed all threads before, or
condition variables were possible to destroy while other
threads still waited on them.

The easiest fix appears to be just cancel the demod thread
and wait for it to exit before proceeding for the door.

Signed-off-by: Steve Markgraf <steve@steve-m.de>
master
Pete Zaitcev 7 years ago committed by Steve Markgraf
parent a854ae8b48
commit ce9595ef53
  1. 2
      src/rtl_adsb.c

@ -492,6 +492,8 @@ int main(int argc, char **argv)
else { else {
fprintf(stderr, "\nLibrary error %d, exiting...\n", r);} fprintf(stderr, "\nLibrary error %d, exiting...\n", r);}
rtlsdr_cancel_async(dev); rtlsdr_cancel_async(dev);
pthread_cancel(demod_thread);
pthread_join(demod_thread, NULL);
pthread_cond_destroy(&ready); pthread_cond_destroy(&ready);
pthread_mutex_destroy(&ready_m); pthread_mutex_destroy(&ready_m);

Loading…
Cancel
Save