From 29fdf1405b8c39938178867a9023c992dbf30365 Mon Sep 17 00:00:00 2001 From: Sven Strohschein Date: Mon, 27 Jul 2020 21:48:52 +0200 Subject: [PATCH] [innogysmarthome] Reconnect fix (#8186) * Reconnect fix (isDone was never true, because the scheduled task is every time currently running when the scheduleRestartClient method is executed) Closes #8182 Signed-off-by: Sven Strohschein --- .../internal/handler/InnogyBridgeHandler.java | 13 +++++++++++-- 1 file changed, 11 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..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 @@ -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,13 @@ private void refreshAccessToken() { logger.debug("Could not refresh tokens", e); } } + + /** + * 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; + } }