Skip to content

Commit 2474953

Browse files
authored
[insteon] Use separate pool for long running threads (openhab#18147)
Signed-off-by: Jeremy Setton <[email protected]>
1 parent 8a61c37 commit 2474953

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonBaseThingHandler.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,8 @@ public void updateProperties(Device device) {
370370
}
371371

372372
protected void cancelJob(@Nullable ScheduledFuture<?> job, boolean interrupt) {
373-
if (job != null) {
373+
if (job != null && !job.isCancelled()) {
374374
job.cancel(interrupt);
375-
job = null;
376375
}
377376
}
378377
}

bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonBridgeHandler.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import static org.openhab.binding.insteon.internal.InsteonBindingConstants.*;
1616

1717
import java.util.Optional;
18+
import java.util.concurrent.ScheduledExecutorService;
1819
import java.util.concurrent.ScheduledFuture;
1920
import java.util.concurrent.TimeUnit;
2021
import java.util.stream.Stream;
@@ -33,6 +34,7 @@
3334
import org.openhab.binding.insteon.internal.device.InsteonModem;
3435
import org.openhab.binding.insteon.internal.device.ProductData;
3536
import org.openhab.binding.insteon.internal.discovery.InsteonDiscoveryService;
37+
import org.openhab.core.common.ThreadPoolManager;
3638
import org.openhab.core.io.transport.serial.SerialPortManager;
3739
import org.openhab.core.storage.Storage;
3840
import org.openhab.core.storage.StorageService;
@@ -58,6 +60,9 @@ public class InsteonBridgeHandler extends InsteonBaseThingHandler implements Bri
5860
private static final int RETRY_INTERVAL = 30; // seconds
5961
private static final int START_DELAY = 5; // seconds
6062

63+
private final ScheduledExecutorService insteonScheduler = ThreadPoolManager
64+
.getScheduledPool(BINDING_ID + "-" + getThingId());
65+
6166
private @Nullable InsteonModem modem;
6267
private @Nullable InsteonDiscoveryService discoveryService;
6368
private @Nullable ScheduledFuture<?> connectJob;
@@ -167,7 +172,7 @@ public void initialize() {
167172
legacyHandler.disable();
168173
}
169174

170-
InsteonModem modem = InsteonModem.makeModem(this, config, httpClient, scheduler, serialPortManager);
175+
InsteonModem modem = InsteonModem.makeModem(this, config, httpClient, insteonScheduler, serialPortManager);
171176
this.modem = modem;
172177

173178
if (isInitialized()) {
@@ -314,8 +319,9 @@ public void reconnect(InsteonModem modem) {
314319
return;
315320
}
316321

317-
cancelJob(reconnectJob, false);
318322
updateStatus();
323+
324+
cancelJob(reconnectJob, false);
319325
}, 0, RETRY_INTERVAL, TimeUnit.SECONDS);
320326
}
321327

@@ -327,10 +333,7 @@ public void reset(long delay) {
327333

328334
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.DUTY_CYCLE, "Resetting bridge.");
329335

330-
resetJob = scheduler.schedule(() -> {
331-
initialize();
332-
cancelJob(resetJob, false);
333-
}, delay, TimeUnit.SECONDS);
336+
resetJob = scheduler.schedule(this::initialize, delay, TimeUnit.SECONDS);
334337
});
335338
}
336339

bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonLegacyNetworkHandler.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,21 @@
1616
import java.util.Map;
1717
import java.util.Map.Entry;
1818
import java.util.concurrent.ConcurrentHashMap;
19+
import java.util.concurrent.ScheduledExecutorService;
1920
import java.util.concurrent.ScheduledFuture;
2021
import java.util.concurrent.TimeUnit;
2122

2223
import org.eclipse.jdt.annotation.NonNullByDefault;
2324
import org.eclipse.jdt.annotation.Nullable;
2425
import org.eclipse.jetty.client.HttpClient;
26+
import org.openhab.binding.insteon.internal.InsteonBindingConstants;
2527
import org.openhab.binding.insteon.internal.InsteonLegacyBinding;
2628
import org.openhab.binding.insteon.internal.config.InsteonBridgeConfiguration;
2729
import org.openhab.binding.insteon.internal.config.InsteonLegacyNetworkConfiguration;
2830
import org.openhab.binding.insteon.internal.device.DeviceAddress;
2931
import org.openhab.binding.insteon.internal.device.InsteonAddress;
3032
import org.openhab.binding.insteon.internal.discovery.InsteonLegacyDiscoveryService;
33+
import org.openhab.core.common.ThreadPoolManager;
3134
import org.openhab.core.io.console.Console;
3235
import org.openhab.core.io.transport.serial.SerialPortManager;
3336
import org.openhab.core.thing.Bridge;
@@ -61,6 +64,9 @@ public class InsteonLegacyNetworkHandler extends BaseBridgeHandler {
6164

6265
private final Logger logger = LoggerFactory.getLogger(InsteonLegacyNetworkHandler.class);
6366

67+
private final ScheduledExecutorService insteonScheduler = ThreadPoolManager
68+
.getScheduledPool(InsteonBindingConstants.BINDING_ID + "-" + getThing().getUID().getId());
69+
6470
private @Nullable InsteonLegacyBinding insteonBinding;
6571
private @Nullable InsteonLegacyDiscoveryService insteonDiscoveryService;
6672
private @Nullable ScheduledFuture<?> driverInitializedJob = null;
@@ -108,7 +114,7 @@ public void initialize() {
108114
return;
109115
}
110116

111-
insteonBinding = new InsteonLegacyBinding(this, config, httpClient, scheduler, serialPortManager);
117+
insteonBinding = new InsteonLegacyBinding(this, config, httpClient, insteonScheduler, serialPortManager);
112118
updateStatus(ThingStatus.UNKNOWN);
113119

114120
// hold off on starting to poll until devices that already are defined as things are added.

0 commit comments

Comments
 (0)