From 6b3d07dac1b295eeb03e9cab78273575781504fd Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 11 Nov 2018 20:17:50 +0200 Subject: [PATCH] [Smell] Improper InterruptedException handling - Fixes thread interruption if interrupted during WebServer shutdown - Fixes thread interruption if interrupted during Processing shutdown --- .../plan/system/processing/Processing.java | 15 +++++++++------ .../plan/system/webserver/WebServer.java | 9 ++++++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/Processing.java b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/Processing.java index 9f6c0ac2a..7592f8508 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/Processing.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/Processing.java @@ -145,15 +145,18 @@ public class Processing implements SubSystem { errorHandler.log(L.WARN, this.getClass(), e); } } - if (!nonCriticalExecutor.isTerminated()) { - try { - nonCriticalExecutor.awaitTermination(1, TimeUnit.SECONDS); - } catch (InterruptedException e) { + try { + if (!nonCriticalExecutor.isTerminated() && !nonCriticalExecutor.awaitTermination(1, TimeUnit.SECONDS)) { nonCriticalExecutor.shutdownNow(); } - } - if (!criticalExecutor.isTerminated()) { + if (!criticalExecutor.isTerminated()) { + criticalExecutor.shutdownNow(); + } + } catch (InterruptedException e) { + logger.error("Processing shutdown thread interrupted: " + e.getMessage()); + nonCriticalExecutor.shutdownNow(); criticalExecutor.shutdownNow(); + Thread.currentThread().interrupt(); } logger.info(locale.get().getString(PluginLang.DISABLED_PROCESSING_COMPLETE)); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/WebServer.java b/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/WebServer.java index a8dedc10d..1b96b28f3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/WebServer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/WebServer.java @@ -258,9 +258,12 @@ public class WebServer implements SubSystem { ExecutorService service = (ExecutorService) executor; service.shutdown(); try { - service.awaitTermination(5, TimeUnit.SECONDS); - } catch (InterruptedException timeoutExceededEx) { - service.shutdownNow(); + if (!service.awaitTermination(5, TimeUnit.SECONDS)) { + service.shutdownNow(); + } + } catch (InterruptedException e) { + logger.error("WebServer ExecutorService shutdown thread interrupted on disable: " + e.getMessage()); + Thread.currentThread().interrupt(); } } }