mirror of
https://github.com/rtlsdrblog/rtl-sdr-blog.git
synced 2024-12-27 03:18:30 +01:00
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>
This commit is contained in:
parent
a854ae8b48
commit
ce9595ef53
@ -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…
Reference in New Issue
Block a user