From 31cde42da566d264693fd7a582338fc4fa878765 Mon Sep 17 00:00:00 2001 From: Marcel Date: Wed, 8 Sep 2021 22:13:32 +0200 Subject: [PATCH] [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 --- .../internal/handler/MiIoAbstractHandler.java | 6 ++++-- .../transport/MiIoAsyncCommunication.java | 15 +++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java index 93acefd1b4..b97d68cd10 100644 --- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java +++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java @@ -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; diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/transport/MiIoAsyncCommunication.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/transport/MiIoAsyncCommunication.java index 63a75a4d55..95be2fba35 100644 --- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/transport/MiIoAsyncCommunication.java +++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/transport/MiIoAsyncCommunication.java @@ -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); } } -- 2.47.3