From 38db76b87c79225325c439d564dfe89ce3482cf7 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 Signed-off-by: Dave J Schoepel --- .../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 93acefd1b46e3..b97d68cd10d86 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 void initialize() { 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 63a75a4d55dd9..95be2fba35aa8 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 @@ MiIoSendCommand sendMiIoSendCommand(MiIoSendCommand miIoSendCommand) { 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 synchronized void startReceiver() { * */ 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 void run() { // 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); } }