From bc6789cad4b5b2be6fe346244970e39ea1195b98 Mon Sep 17 00:00:00 2001 From: Sven Strohschein Date: Fri, 24 Jul 2020 20:16:01 +0200 Subject: [PATCH 1/2] Reconnect fix (isDone was never true, because the scheduled task is everytime currently running when the scheduleRestartClient method is executed) Signed-off-by: Sven Strohschein --- .../internal/handler/InnogyBridgeHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java b/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java index 76b6c498f6f31..82ae46c6a0cd3 100644 --- a/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java +++ b/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java @@ -288,9 +288,9 @@ public void onAccessTokenResponse(final AccessTokenResponse credential) { * @param seconds */ private synchronized void scheduleRestartClient(final long seconds) { - final ScheduledFuture localReinitJob = reinitJob; + @Nullable final ScheduledFuture localReinitJob = reinitJob; - if (localReinitJob != null && !localReinitJob.isDone()) { + if (localReinitJob != null && isAlreadyScheduled(localReinitJob)) { logger.debug("Scheduling reinitialize in {} seconds - ignored: already triggered in {} seconds.", seconds, localReinitJob.getDelay(TimeUnit.SECONDS)); return; @@ -951,4 +951,8 @@ private void refreshAccessToken() { logger.debug("Could not refresh tokens", e); } } + + private static boolean isAlreadyScheduled(ScheduledFuture job) { + return job.getDelay(TimeUnit.SECONDS) > 0; + } } From 74d7e366b29644176f883dd80bb659b6a01c0fbf Mon Sep 17 00:00:00 2001 From: Sven Strohschein Date: Fri, 24 Jul 2020 20:25:42 +0200 Subject: [PATCH 2/2] Reconnect fix (isDone was never true, because the scheduled task is everytime currently running when the scheduleRestartClient method is executed) Signed-off-by: Sven Strohschein --- .../internal/handler/InnogyBridgeHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java b/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java index 82ae46c6a0cd3..c5d4bfe9adb68 100644 --- a/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java +++ b/bundles/org.openhab.binding.innogysmarthome/src/main/java/org/openhab/binding/innogysmarthome/internal/handler/InnogyBridgeHandler.java @@ -952,6 +952,11 @@ private void refreshAccessToken() { } } + /** + * Checks if the job is already (re-)scheduled. + * @param job job to check + * @return true, when the job is already (re-)scheduled, otherwise false + */ private static boolean isAlreadyScheduled(ScheduledFuture job) { return job.getDelay(TimeUnit.SECONDS) > 0; }