[miio] Avoid shutting down shared executor service (#11166)

* [miio] Avoid shutting down shared executor service

* Closing #11152
* Better identify communication threads

Signed-off-by: Marcel Verpaalen <marcel@verpaalen.com>
This commit is contained in:
Marcel 2021-09-08 22:13:32 +02:00 committed by GitHub
parent 0a96792a93
commit 31cde42da5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 8 deletions

View File

@ -77,7 +77,9 @@ public abstract class MiIoAbstractHandler extends BaseThingHandler implements Mi
protected static final Gson GSON = new GsonBuilder().create();
protected static final String TIMESTAMP = "timestamp";
protected ScheduledExecutorService miIoScheduler = scheduler;
protected ScheduledExecutorService miIoScheduler = new ScheduledThreadPoolExecutor(3,
new NamedThreadFactory("binding-" + getThing().getUID().getAsString(), true));
protected @Nullable ScheduledFuture<?> pollingJob;
protected MiIoDevices miDevice = MiIoDevices.UNKNOWN;
protected boolean isIdentified;
@ -134,7 +136,7 @@ public abstract class MiIoAbstractHandler extends BaseThingHandler implements Mi
getThing().getThingTypeUID());
ScheduledThreadPoolExecutor miIoScheduler = new ScheduledThreadPoolExecutor(3,
new NamedThreadFactory(getThing().getUID().getAsString(), true));
new NamedThreadFactory("binding-" + getThing().getUID().getAsString(), true));
miIoScheduler.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
miIoScheduler.setRemoveOnCancelPolicy(true);
this.miIoScheduler = miIoScheduler;

View File

@ -249,7 +249,7 @@ public class MiIoAsyncCommunication {
public synchronized void startReceiver() {
MessageSenderThread senderThread = this.senderThread;
if (senderThread == null || !senderThread.isAlive()) {
senderThread = new MessageSenderThread();
senderThread = new MessageSenderThread(deviceId);
senderThread.start();
this.senderThread = senderThread;
}
@ -261,14 +261,17 @@ public class MiIoAsyncCommunication {
*
*/
private class MessageSenderThread extends Thread {
public MessageSenderThread() {
super("Mi IO MessageSenderThread");
private final String deviceId;
public MessageSenderThread(String deviceId) {
super("OH-binding-miio-MessageSenderThread-" + deviceId);
setDaemon(true);
this.deviceId = deviceId;
}
@Override
public void run() {
logger.debug("Starting Mi IO MessageSenderThread");
logger.debug("Starting Mi IO MessageSenderThread {}", deviceId);
while (!interrupted()) {
try {
if (concurrentLinkedQueue.isEmpty()) {
@ -291,11 +294,11 @@ public class MiIoAsyncCommunication {
// That's our signal to stop
break;
} catch (Exception e) {
logger.warn("Error while polling/sending message", e);
logger.warn("Error while polling/sending message for {}", deviceId, e);
}
}
closeSocket();
logger.debug("Finished Mi IO MessageSenderThread");
logger.debug("Finished Mi IO MessageSenderThread {}", deviceId);
}
}