From 4a68cd9407a3da587756e15de9f533cecedd87d7 Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Sun, 18 Dec 2022 04:29:55 -0500 Subject: [PATCH] #1364 Enhancements to resolve issue with tuner shutdown hang on application shutdown. (#1365) Co-authored-by: Dennis Sheirer --- .../dsheirer/source/tuner/usb/USBTunerController.java | 11 ++++++++--- src/main/java/io/github/dsheirer/util/Dispatcher.java | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java b/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java index 3c39822c..5482b63a 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java +++ b/src/main/java/io/github/dsheirer/source/tuner/usb/USBTunerController.java @@ -643,9 +643,14 @@ public abstract class USBTunerController extends TunerController default: //Unexpected transfer error - need to reset the bulk transfer interface transfer.buffer().rewind(); - setErrorMessage("LibUsb Transfer Error - stopping device - status [" + transfer.status() + "] - " + - LibUsb.errorName(transfer.status())); - return; + + //Only set an error if we're not shutting down + if(mAutoResubmitTransfers) + { + setErrorMessage("LibUsb Transfer Error - stopping device - status [" + transfer.status() + "] - " + + LibUsb.errorName(transfer.status())); + } + break; } } diff --git a/src/main/java/io/github/dsheirer/util/Dispatcher.java b/src/main/java/io/github/dsheirer/util/Dispatcher.java index 31e014b8..c71188f6 100644 --- a/src/main/java/io/github/dsheirer/util/Dispatcher.java +++ b/src/main/java/io/github/dsheirer/util/Dispatcher.java @@ -122,7 +122,8 @@ public class Dispatcher implements Listener try { - mThread.join(2000); + mThread.interrupt(); + mThread.join(); mThread = null; } catch(Exception e) @@ -183,7 +184,7 @@ public class Dispatcher implements Listener } catch(InterruptedException e) { - mLog.error("Buffer processor thread was interrupted"); + //Normal shutdown is by interrupt } catch(Exception e) { @@ -191,6 +192,7 @@ public class Dispatcher implements Listener } } + //Shutting down - clear the queue mQueue.clear(); } catch(Throwable t)