From 546b3bda3fd24f476edd093deebc87760d400c77 Mon Sep 17 00:00:00 2001 From: Alexander Maret-Huskinson Date: Mon, 6 Mar 2017 20:47:06 +0100 Subject: [PATCH] Fixed bug where the binding could not be stopped and started manually. --- .../internal/discovery/ZMoteDiscoveryService.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/openhab/binding/zmote/internal/discovery/ZMoteDiscoveryService.java b/src/main/java/org/openhab/binding/zmote/internal/discovery/ZMoteDiscoveryService.java index 4808912..c5a11eb 100644 --- a/src/main/java/org/openhab/binding/zmote/internal/discovery/ZMoteDiscoveryService.java +++ b/src/main/java/org/openhab/binding/zmote/internal/discovery/ZMoteDiscoveryService.java @@ -8,10 +8,10 @@ */ package org.openhab.binding.zmote.internal.discovery; -import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; +import java.net.SocketException; import java.util.Date; import java.util.List; import java.util.Map; @@ -57,7 +57,8 @@ public class ZMoteDiscoveryService implements IZMoteDiscoveryService { private final Map discoveryResults = new ConcurrentHashMap<>(); private final List discoveryListeners = new CopyOnWriteArrayList<>(); - private ScheduledExecutorService scheduler = null; + private final ScheduledExecutorService scheduler = ThreadPoolManager + .getScheduledPool(ZMoteDiscoveryService.class.getName()); private ScheduledFuture discoveryFuture = null; private MulticastSocket discoverySocket = null; @@ -128,7 +129,6 @@ protected void activate() { deactivate(); } - scheduler = ThreadPoolManager.getScheduledPool(ZMoteDiscoveryService.class.getName()); startDiscoveryFuture(); startScan(); @@ -147,10 +147,6 @@ protected void activate() { protected void deactivate() { try { - if (scheduler != null) { - scheduler.shutdown(); - } - stopDiscoveryFuture(); if (logger.isDebugEnabled()) { @@ -162,8 +158,6 @@ protected void deactivate() { logger.debug("Ignored exception while deactivating ZMote discovery service.", e); } - } finally { - scheduler = null; } } @@ -198,7 +192,7 @@ private void executeDiscovery() { } } } catch (final Exception e) { - if ((e instanceof IOException) && Thread.currentThread().isInterrupted()) { + if ((e instanceof SocketException) && Thread.currentThread().isInterrupted()) { if (logger.isDebugEnabled()) { logger.debug("Discovery service worker has been terminated."); }