From c0118930bec83ff89619f8e0fad097ff554a6d7b Mon Sep 17 00:00:00 2001 From: J-N-K Date: Tue, 10 Nov 2020 08:43:13 +0100 Subject: [PATCH] [digitalstrom] fix NPE (#8992) * fix NPE * fix formatting Signed-off-by: Jan N. Klug --- .../internal/lib/event/EventListener.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/bundles/org.openhab.binding.digitalstrom/src/main/java/org/openhab/binding/digitalstrom/internal/lib/event/EventListener.java b/bundles/org.openhab.binding.digitalstrom/src/main/java/org/openhab/binding/digitalstrom/internal/lib/event/EventListener.java index fa324ccbe..0460d659e 100644 --- a/bundles/org.openhab.binding.digitalstrom/src/main/java/org/openhab/binding/digitalstrom/internal/lib/event/EventListener.java +++ b/bundles/org.openhab.binding.digitalstrom/src/main/java/org/openhab/binding/digitalstrom/internal/lib/event/EventListener.java @@ -14,7 +14,6 @@ package org.openhab.binding.digitalstrom.internal.lib.event; import java.util.ArrayList; import java.util.Collections; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ScheduledExecutorService; @@ -137,14 +136,21 @@ public class EventListener { return isStarted; } - private void internalStop() { - if (subscriptionScheduler != null && !subscriptionScheduler.isCancelled()) { + private void stopSubscriptionScheduler() { + final ScheduledFuture subscriptionScheduler = this.subscriptionScheduler; + if (subscriptionScheduler != null) { subscriptionScheduler.cancel(true); - subscriptionScheduler = null; + this.subscriptionScheduler = null; } - if (pollingScheduler != null && !pollingScheduler.isCancelled()) { + } + + private void internalStop() { + stopSubscriptionScheduler(); + + ScheduledFuture pollingScheduler = this.pollingScheduler; + if (pollingScheduler != null) { pollingScheduler.cancel(true); - pollingScheduler = null; + this.pollingScheduler = null; unsubscribe(); logger.debug("internal stop EventListener"); } @@ -347,17 +353,10 @@ public class EventListener { return subscribed; } - private void subscribe(final List evetNames) { - final Iterator eventNameIter = evetNames.iterator(); - subscriptionScheduler = scheduler.scheduleWithFixedDelay(new Runnable() { - - @Override - public void run() { - while (eventNameIter.hasNext()) { - subscribe(eventNameIter.next()); - } - subscriptionScheduler.cancel(true); - } + private void subscribe(final List eventNames) { + subscriptionScheduler = scheduler.scheduleWithFixedDelay(() -> { + eventNames.forEach(this::subscribe); + stopSubscriptionScheduler(); }, 0, SUBSCRIBE_DELAY, TimeUnit.MILLISECONDS); }