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

View File

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